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 :

Affichage de tous les chemins d'une arborescence menant à des fichiers


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 754
    Points : 376
    Points
    376
    Par défaut Affichage de tous les chemins d'une arborescence menant à des fichiers
    Bonjour, je n'arrive pas à parcourir une arborescence et je ne comprends pas ce qui cloche

    Auriez vous une idée ???

    Il y a bien entendu des printf inutile dans la procédure, mais c'est pour aider au débuggage

    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
    void parcourirREP(char *nomREP)
    {
     
    DIR *rep;
    struct dirent* El;
    struct stat Infos;
    char Desi[500];
     
    rep=opendir(nomREP); 
    if(rep==NULL)
    {
    printf("Fail\n"); /*affichera un message d'erreur spécifique au PATH*/
    }
    else 
    {
    strcpy(Desi,nomREP);
    	strcat(Desi,"/"); /*on concatène un / à la chaine*/
    while ((El=readdir(rep)) != NULL)
    {
    printf("Lecture en cours : %s\n",El->d_name);
       if (strcmp(El->d_name,".")!=0 && strcmp(El->d_name,"..")!=0)
       {
          if (stat(Desi,&Infos)==0)
          {
              if (S_ISDIR(Infos.st_mode)) /* Si c’est un répertoire alors appel récursif*/
              {
                  strcat(Desi,El->d_name);
                  parcourirREP(Desi);
              }
              else /* C’est un fichier */
              {
                   printf("Fichier: %s\n",Desi);
              }
         }
       }
    }
    }
    }
    A l'exécution j'obtiens ceci; je n'entre que dans une série de dossier, puis dès que je rencontre le premier fichier on dirait que ça plante, ça concatène le fichier à ma chaine alors que je n'ai rien codé de tel du moins je pense pas

    Lecture en cours : .
    Lecture en cours : S4
    Lecture en cours : tp10
    Lecture en cours : rougeNoir.h
    Fail
    Lecture en cours : rougeNoir.c
    Fichier: C-C++/S4/tp10/rougeNoir.h
    Lecture en cours : unit_rn
    Fichier: C-C++/S4/tp10/rougeNoir.h
    Lecture en cours : .
    Lecture en cours : rb_final.pdf
    Fichier: C-C++/S4/tp10/rougeNoir.h
    Lecture en cours : ..
    Lecture en cours : tp9
    Fail
    Lecture en cours : tp5.2
    Lecture en cours : .
    Lecture en cours : tp4
    Lecture en cours : tp3
    Lecture en cours : tp6
    Lecture en cours : tp7
    Lecture en cours : tp7.tar.gz
    Lecture en cours : tp2
    Lecture en cours : tp9.tar.gz
    Lecture en cours : tp5
    Lecture en cours : tp6.tar.gz
    Lecture en cours : ..
    Lecture en cours : S3
    Fail
    Lecture en cours : ..

  2. #2
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Je ne comprends pas vraiment ce que tu veux faire... Tu veux juste descendre aussi loin que possible dans ton arborescence ou faire autre chose ? Pour tes "fails", c'est sans doute parce que tu n'as pas les droits d'acces au dossier, essaie de relancer ton programme en root.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 754
    Points : 376
    Points
    376
    Par défaut
    Solution trouvé je ne concaténais pas la chaîne quand il fallait à moment donné.

    Merci quand même !

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Amnael Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void parcourirREP(char *nomREP)
    {
    
    DIR *rep;
    strcpy(Desi,nomREP);
    	strcat(Desi,"/"); /*on concatène un / à la chaine*/
    while ((El=readdir(rep)) != NULL)
    {
    printf("Lecture en cours : %s\n",El->d_name);
                  strcat(Desi,El->d_name);
    }
    Salut
    A chaque itération tu fais du strcat(Desi, El->dname). Tu allonges donc la chaine au lieu de la réinitialiser. Bref si ton dossier "xxx" contient les fichiers "toto" et titi", à la seconde itération ta chaine contient "xxx/tototiti" au lieu de contenir "xxx/toto" puis "xxx/titi".
    C'est quand-même dommage tous ces strcat() alors que tu as sprintf() à ta disposition.
    N'oublie pas les closedir() non plus...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/06/2014, 13h15
  2. Réponses: 3
    Dernier message: 03/07/2010, 17h31
  3. Réponses: 2
    Dernier message: 23/04/2009, 10h24
  4. Réponses: 1
    Dernier message: 22/04/2009, 22h39
  5. affichage de TOUS les champs d'une table
    Par babulior dans le forum ASP
    Réponses: 6
    Dernier message: 28/06/2005, 15h33

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