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 :

[langage] connaissez-vous autre chose que -d


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 12
    Points : 7
    Points
    7
    Par défaut [langage] connaissez-vous autre chose que -d
    Je fais une fonction récursive qui me permet de rechercher les sous-répertoires d'un répertoire.

    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
    #Ouvrerture du répertoire
    		opendir($DIR, "$_[0]") || Error('ouverture', 'repertoire');
     
    		#Lecture du répertoire
    		while($Fichier = readdir($DIR))
    		{
    			#S'il ne s'agit pas du répertoire courant et du répertoire parent
    			if(($Fichier ne ".") && ($Fichier ne ".."))
    			{
    				#Si c'est un répertoire
    				if(-d $Fichier)
    				{	
    					#Crée un fichier tar du répertoire à archiver.
    					OuvrirRepertoire("$_[0]/$Fichier", "$_[1]-$Fichier", $_[2] - 1);
    				}
    			}
    		}
     
    		#Fermeture du répertoire
    		closedir($DIR) || Error('fermeture', "repertoire $_[0]");
    mon problème est que lorsque je vérifie si les fichiers d'un répertoire avec -d $Fichier, il y a des répertoires qui ne sont pas détectés.
    y'aurait pas une meilleur fonction que -d pour faire ce test?
    Des noms de variables significatifs, utiliser des constantes, commenter son code et bien l'indenter sont les secrets pour un code clair.

  2. #2
    Membre éclairé

    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    412
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2002
    Messages : 412
    Points : 657
    Points
    657
    Par défaut
    j'ai quasimment le même code et jamais eu de problème.
    Même si je ne vois pas de différence, je te donne mon code:
    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
     
    sub anaDirectorate {
      my($namedir) = @_;
      local $_;
      local *DIR;
      opendir(DIR, $namedir) || die "Cannot opendir $namedir: $!";
      foreach (readdir(DIR)) {
        next if ($_ eq "." || $_ eq "..");
        $_ = "$namedir\\$_";
        if (-d) {
          anaDirectorate($_);
        } else {
          anaFile($_);
        }
      }
      closedir DIR || die "Cannot closedir $namedir: $!";
    }
    sinon quelle est ton erreur?

    Thomas

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    J'appelle ma fonction une première fois, elle lit les fichiers du répertoire, quand elle voit un répertoire, elle se rappelle dans le if.
    La fonction ouvre le répertoire trouvé qui lui est passé en paramètre,
    elle lit les fichiers du répertoire mais le if ne trouve pas de répertoires même s'il y en a.

    Voici la trace:
    ouvre /home
    lit le fichier test.txt
    n'est pas un répertoire
    boucle

    lit le fichier Usager
    Est un répertoire
    appelle la fonction OuvrirRepertoire (/home/Usager)

    Ouvre /home/Usager
    lit le fichier Public
    n'est pas un répertoire #Pourtant c'en est un
    boucle

    Ferme le répertoire
    ferme le répertoire
    Des noms de variables significatifs, utiliser des constantes, commenter son code et bien l'indenter sont les secrets pour un code clair.

  4. #4
    Membre éclairé

    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    412
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2002
    Messages : 412
    Points : 657
    Points
    657
    Par défaut
    actuellement tu as :

    -d "Public"

    A mon avis il faut que dans $fichier il y ait le nom completé :

    -d "/home/Usager/Public"

    Sinon teste mon code voir si il marche sur ton système.

    Thomas

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Merci bien!
    c'était bien parce qu'il manquait le Path au fichier
    Des noms de variables significatifs, utiliser des constantes, commenter son code et bien l'indenter sont les secrets pour un code clair.

Discussions similaires

  1. Une bibliothèque pour faire autre chose que jouer avec ma carte graphique ?
    Par Neilos dans le forum Coprocesseurs et calcul hétérogène
    Réponses: 7
    Dernier message: 09/11/2006, 10h51
  2. Autre chose que les SSII
    Par Invité dans le forum Emploi
    Réponses: 18
    Dernier message: 25/08/2006, 13h36
  3. ON DELETE SET autre chose que null
    Par minirom dans le forum Requêtes
    Réponses: 4
    Dernier message: 26/07/2006, 16h32
  4. Réponses: 11
    Dernier message: 13/05/2006, 16h17
  5. Arrive plus a installer autre chose que debian
    Par kosmic dans le forum Debian
    Réponses: 10
    Dernier message: 12/12/2005, 12h50

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