Affichage du chemin d'un fichier lors d'un listage recursif en C

zegota Messages postés 10 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 16 mai 2004 - 16 mai 2004 à 14:16
ensiame Messages postés 15 Date d'inscription mercredi 10 mars 2004 Statut Membre Dernière intervention 15 décembre 2005 - 16 mai 2004 à 23:17
voici ma procédure de parcours récursif,
je l'ai testé elle fonctionne (sauf pour les rep qui commencent par un "." mais ce n'est pas un problme pour lemoment)
Je voudrais cependant l'améliorer pour afficher
le chemin complet de chaque repertoire...
j'essais depuis ce matin mais je n'y arrive pas,
voici le code de la procedure :

 #include <stdio.h> 
 #include <malloc.h> 
 #include <string.h> 
 #include <dirent.h> 
 #include <sys/types.h> 
 #include <sys/stat.h> 
 #include  
 
 // REMPLACER STAT PAR LSTAT 
 // PROBLEME AVEC LES REPERTOIRES QUI COMMENCENT PAR "." 
 //-- Fonction recursive qui Affiche le contenu du repertoire --// 
 
 void parcoursRep(char *rep){ 
 
 
     DIR *dir;    //flux repertoire 
     struct dirent *entree;    //une entree du repertoire 
     struct stat infosEntree;    //structure contenant les informations d'une entree 
 
     if(strcmp(rep,"")==0){ 
       rep=(char*)malloc(sizeof(char)*2); 
       strcpy(rep,".\0"); 
     } 
 
     dir = opendir(rep);//ouverture du repertoire 
 
     chdir(rep); 
 
     if (dir == NULL){ 
       printf("%s",rep); 
       perror("opendir"); 
 
       exit(1); 
     } 
 
     while((entree=readdir(dir))!=NULL){ 
         if((strcmp(entree->d_name,".")!=0)&&(strcmp(entree->d_name,"..")!=0)){  //on traite pas . et .. 
             stat(entree->d_name,&infosEntree); //infos du fichier 
             if(S_ISDIR(infosEntree.st_mode)){ 
                 parcoursRep(entree->d_name); 
                 chdir(".."); 
             } 
 
             printf("%s\n",entree->d_name); 
         } 
     } 
     free (entree); 
     closedir(dir); 
 
 } 
 
 int main(int argc, char *argv[]){ 
    parcoursRep(""); 
 }


je suis desespéré, ca fait 5 jours que j'essai de faire
cette procédure, je pense qu'il suffit d'ajouter un deuxieme
parametre a la fonction ou l'on concatenerai a chaque fois le chemin
actuel mais je n'y arrive pas...

1 réponse

ensiame Messages postés 15 Date d'inscription mercredi 10 mars 2004 Statut Membre Dernière intervention 15 décembre 2005
16 mai 2004 à 23:17
Tu as pas moyen de t'en sortir avec un dir /s ? Il te renvoie directement l'arborescence.
0
Rejoignez-nous