IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

[Débutant] modifier les droits sur un fichier


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 24
    Par défaut [Débutant] modifier les droits sur un fichier
    ou mauvaise utilisation de rename et unlink

    Bonjour,

    je voudrais transformer le nom d'un fichier toto.txt en toto_bis.txt

    donc soit renommer, soit copier avec son nom modifié et effacer l'original.
    J'arrive à faire la copie, mais pas la modification du nom avec la commande rename, ni la suppression, d'où mon interrogation sur les droits sous WINDOWS XP

    Voici le script :
    ------------------------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
      use Cwd;
      use File::Copy;
     
      $RepCourant = cwd();
      my @nom_fichiers;
      print "lit le repertoire courant: $RepCourant \n";
     
      # Ouverture d'un repertoire
      opendir (my $FhRep, $RepCourant) 
        or die "impossible d'ouvrir le repertoire $repertoire\n";
     
      # Liste nom_fichiers et repertoire sauf (. et ..)
      my @Contenu = grep { /.txt/ } readdir($FhRep);
     
      # Fermeture du répertoire
      closedir ($FhRep);
     
    # On recupere tous les nom_fichiers
      foreach my $nom_fichier ( @Contenu ) {
        open my($fichier), '<', $nom_fichier
         or die "Ce fichier $nom_fichier n'a pu etre ouvert : $!\n";
     
    # "_bis" est le nom du repertoire que je voudrais accoller 
    # au nom du fichier
      $term="_bis";
      $longavg=length($RepCourant);
      $longfic=length($nom_fichier);
     
    # extraction du l'extension du fichier sur 3 caractères et du
     
    # "." qui la précède 
     
      $nom_fichier_dim = substr($nom_fichier,0,$longfic -4);
     
    # ajout de "_bis.txt" au nom du fichier
     
      $nom_fichier_resu = $nom_fichier_dim .$term .".txt";
      $nom_fichier_complet = $RepCourant ."\/" . $nom_fichier;
      $nom_fichier_resu_complet = $RepCourant ."\/" . $nom_fichier_resu;
      print "toto \n $nom_fichier_complet \n $nom_fichier_resu_complet \n";
      copy ($nom_fichier_complet, $nom_fichier_resu_complet)
       or die "Pas moyen de renommer $nom_fichier en $nom_fichier_resu .";
      unlink ($nom_fichier_complet);
    }
    --------------------------------------------------------------
    Merci d'avance si quelqu'un peut m'envoyer vers la bonne doc ou voit tout de suite ce qui ne va.

    cordialement

    ... un peu plus tard :

    pour mon problème spécifique, j'aurai la possibilité d'ajouter une ligne avec la commande ATTRIB dans un script windows qui appellera le script PERL et résoudra mon problème. J'espère avoir aider quelqu'un.

    cordialement

  2. #2
    Membre éclairé Avatar de Tiger-222
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 76
    Par défaut
    Pense à mettre en début de script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use strict;
    use warnings;
    Ensuite, j'ai testé ton script et semble fonctionner en corrigeant les erreurs. J'ai testé sous Debian GNU/Linux, pas de windows sous la main.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #!/usr/bin/perl
     
    use strict;
    use warnings;
    use Cwd;
    use File::Copy;
     
    my $RepCourant = cwd();
    my @nom_fichiers;
    print "lit le repertoire courant : $RepCourant \n";
     
    # Ouverture d'un repertoire
    opendir (my $FhRep, $RepCourant) 
    	or die "impossible d'ouvrir le repertoire $RepCourant\n";
     
    # Liste nom_fichiers et repertoire sauf (. et ..)
    my @Contenu = grep { /.txt/ } readdir $FhRep;
     
    # Fermeture du répertoire
    closedir ($FhRep);
     
    # On recupere tous les nom_fichiers
    foreach my $nom_fichier ( @Contenu ) {
    	open my($fichier), '<', $nom_fichier
    		or die "Ce fichier $nom_fichier n'a pu etre ouvert : $!\n";
     
    	# "_bis" est le nom du repertoire que je voudrais accoller 
    	# au nom du fichier
    	my $term = '_bis.txt';
    	my $longavg = length $RepCourant;
    	my $longfic = length $nom_fichier;
     
    	# extraction du l'extension du fichier sur 3 caractères et du
    	# "." qui la précède 
    	my $nom_fichier_dim = substr $nom_fichier,0,($longfic -4);
     
    	# ajout de "_bis.txt" au nom du fichier
    	my $nom_fichier_resu = $nom_fichier_dim .$term;
    	my $nom_fichier_complet = $RepCourant ."\/" . $nom_fichier;
    	my $nom_fichier_resu_complet = $RepCourant ."\/" . $nom_fichier_resu;
    	print "toto \n $nom_fichier_complet \n $nom_fichier_resu_complet \n";
    	copy ($nom_fichier_complet, $nom_fichier_resu_complet)
    		or die "Pas moyen de renommer $nom_fichier en $nom_fichier_resu .";
    	unlink $nom_fichier_complet;
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 24
    Par défaut
    je suis moi-même un fan de debian, mais j'ai du mal à convaincre les informaticiens de mon employeur et il faudra donc que ça fonctionne sous WIndows. Je viens d'essayer ATTRIB qui n'est pas suffisant. J'ai essayé également cacls. A poursuivre, donc mon problème n'est plus résolu ...

    Merci pour ta réponse - Message reçu pour use strict et warning

  4. #4
    Membre éclairé Avatar de Tiger-222
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 76
    Par défaut
    Je viens d'essayer sur un Windows XP en virtuel, et le script fonctionne à merveille
    Contexte : J'ai créé un dossier sur le bureau et placer deux fichiers texte dedans. J'ai exécuté le script et mes deux fichiers texte sont bien renommés en nom_bis.txt.

    Dans quel contexte as-tu essayé ?
    Quels sont les messages d'erreur (pour attrib, perl, et/ou cacls) ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 24
    Par défaut
    Citation Envoyé par Tiger-222 Voir le message
    Je viens d'essayer sur un Windows XP en virtuel, et le script fonctionne à merveille
    Contexte : J'ai créé un dossier sur le bureau et placer deux fichiers texte dedans. J'ai exécuté le script et mes deux fichiers texte sont bien renommés en nom_bis.txt.

    Dans quel contexte as-tu essayé ?
    Quels sont les messages d'erreur (pour attrib, perl, et/ou cacls) ?
    D'abord, merci tiger-222 de t'intéresser à ce problème :
    j'ai créé un dossier C:\Essai
    Dans ce dossier, j'ai un fichier essai.txt ainsi qu'un fichier essai.bat :
    attrib -r
    perl addbis.pl

    avec addbis.pl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
      use strict;
      use warnings;
      use Cwd;
      use File::Copy;
     
      my $RepCourant = cwd();
      my @nom_fichiers;
      print "lit le repertoire courant: $RepCourant \n";
     
      # Ouverture d'un repertoire
      opendir (my $FhRep, $RepCourant) 
        or die "impossible d'ouvrir le repertoire $RepCourant\n";
     
      # Liste nom_fichiers et repertoire sauf (. et ..)
      my @Contenu = grep { /.txt/ } readdir($FhRep);
     
      # Fermeture du répertoire
      closedir ($FhRep);
     
    # On recupere tous les nom_fichiers
      foreach my $nom_fichier ( @Contenu ) {
        open my($fichier), '<', $nom_fichier
         or die "Ce fichier $nom_fichier n'a pu etre ouvert : $!\n";
     
    # "_bis" est le nom du repertoire que je voudrais accoller 
    # au nom du fichier
      my $term="_bis";
      my $longavg=length($RepCourant);
      my $longfic=length($nom_fichier);
     
    # extraction du l'extension du fichier sur 3 caractères et du
     
    # "." qui la précède 
     
      my $nom_fichier_dim = substr($nom_fichier,0,$longfic -4);
     
    # ajout de "_bis.txt" au nom du fichier
     
      my $nom_fichier_resu = $nom_fichier_dim .$term .".txt";
      my $nom_fichier_complet = $RepCourant ."\/" . $nom_fichier;
      my $nom_fichier_resu_complet = $RepCourant ."\/" . $nom_fichier_resu;
      print "toto \n $nom_fichier_complet \n $nom_fichier_resu_complet \n";
      rename ($nom_fichier_complet, $nom_fichier_resu_complet)
       or die "Pas moyen de renommer $nom_fichier en $nom_fichier_resu .";
     
    }
    la commande rename renvoie le message
    Pas moyen de renommer toto.txt en toto_bis.txt . at addbis.pl line 43.

    Voilà, tu sais tout. Je ne sais pas ce que c'est qu'un bureau virtuel, peut-être qu'il fonctionne mieux qu'un réel ...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Par défaut
    Salut,

    Je viens de tester ton code tel quel et cela fonctionne impec.

    Je tourne sous Windows avec perl (v5.10.1) installé via Cygwin.
    La commande a été lancée via la console windows standard.

    Avec ou sans commande attrib, le script fonctionne.

    par contre je pense que ton problème viens de ces deux lignes là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my $nom_fichier_complet = $RepCourant ."\/" . $nom_fichier;
    my $nom_fichier_resu_complet = $RepCourant ."\/". $nom_fichier_resu;
    remplace les par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $nom_fichier_complet = $RepCourant ."\\" . $nom_fichier;
    my $nom_fichier_resu_complet = $RepCourant ."\\". $nom_fichier_resu;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/06/2009, 00h32
  2. script: donner les droits sur un fichier
    Par krashvi dans le forum Windows
    Réponses: 1
    Dernier message: 29/12/2008, 14h07
  3. API connaitre les droits sur un fichier/dossier
    Par cerede2000 dans le forum Windows
    Réponses: 9
    Dernier message: 27/10/2008, 15h17
  4. Comment modifier les droits sur un répertoire ?
    Par rattlehead dans le forum Framework .NET
    Réponses: 4
    Dernier message: 19/10/2006, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo