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

C Discussion :

Parcours récursif de répertoire, listage des fichiers.


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Parcours récursif de répertoire, listage des fichiers.
    Bonjour à tous,
    J'ai un probleme concernant un programme devant lister de facon récursive les fichiers et sous-répertoire d'un nom de fichier passer en argument.

    voici la méthode de listage simple d'un répertoire suivi de celle de lisatge récursif :

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    /* --------------- SIMPLE ---------------------*/
     
    void ls_dir(char*nameDir){
     
      DIR*dir=opendir(nameDir);
      struct dirent* d;
     
      if(dir){
        while( (d=readdir(dir)) ){
    	  printf("%s\n",d->d_name);
        }
        closedir(dir);
      }
    }
     
    /* ------------------------LISTAGE RECURSIF -------------------*/
     
    void ls_rec(char* nameDir){
        DIR*dir;
        struct dirent* d;
        struct stat st;
         dir=opendir(nameDir);
     
         if( dir != NULL){
           ls_dir(nameDir);
           while( (d=readdir(dir)) ){
    	 stat(d->d_name,&st);
     
    	 if( S_ISDIR(st.st_mode)  && (*d->d_name)!='.'){  //Ici PB : tous les fichiers sont vu comme des repertoires !!
    	   printf(" rentre --> %s\n",d->d_name);
    	   ls_rec(d->d_name);
    	 }
    	 else
    	   continue;
     
    	}
    	closedir(dir);
          }  
     
    }
     
     
     
    /* -----------------------MAIN ---------------------------*/
     
    int main(int argc,char**argv){
     
      ls_rec("/home/user");
     
      struct stat st;
      stat("/home/user/enonceprojet.pdf",&st);
      printf("%d\n",S_ISDIR(st.st_mode)); // Alors qu'ici enonceprojet est bien vu comme un fichier....
     
      return 0;
    }
    Voila le probleme :
    a l'interieur de la fonction, tous les fichiers paraissent etre considérés comme des repertoires !
    Deplus , l'appel recursif n'est jamais déclenché càd le contenu des sous-répertoires n'est pas afficher !

    Voici le résultat :
    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
     
    Bureau
    workspace
    Caml
    enonceprojet.pdf
    test.c~
    Lapins
    text~
    Java
    Documents
    Projets
    C
    test~
    Firefox_wallpaper.png
     rentre --> enonceprojet.pdf
     rentre --> test.c~
     rentre --> Lapins
     rentre --> text~
     rentre --> Java
     rentre --> Documents
     rentre --> Projets
     rentre --> C
     rentre --> test~
     rentre --> Firefox_wallpaper.png
    0
    Si qqun perçoit où est l'erreur, qu'il lève la main bien haut s'il vous plait !
    Merci !

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Bon, voila la raison de cette anomalie apres une heure de recherche, attention accrochez vous :
    le champ " d_name " d'une structure dirent n'est pas le chemin absolu, mais relatif du fichier ... c'est génial ! c'est des prises de tête comme on les aime ! ...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/03/2010, 10h35
  2. Listage des fichiers d'un dossier
    Par Flow_75 dans le forum C++Builder
    Réponses: 7
    Dernier message: 18/12/2006, 11h20
  3. Réponses: 1
    Dernier message: 30/11/2006, 11h01
  4. Comment supprimer un répertoire ayant des fichiers
    Par pinson dans le forum Delphi
    Réponses: 2
    Dernier message: 02/11/2006, 09h52
  5. Réponses: 2
    Dernier message: 10/10/2006, 19h42

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