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

Windows Discussion :

Passage en récursif d'un programme en C


Sujet :

Windows

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Passage en récursif d'un programme en C
    Bonjour,

    J'ai écris un programme en C (sur DevCpp) qui permet de lister les fichiers". txt" contenus dans un répertoire racine ; et tout cela en utilisant l'API Windows. Cela fonctionne bien, mais maintenant je souhaiterais que mon programme liste également les fichiers".txt" contenus dans d'éventuels sous-dossiers du dossier racine. J'ai pensé utiliser la récurssivité, mais je n'arrive à construire ce nouveau programme récurssif.

    Est-ce-que quelqu'un peut m'aider ?

    Merci

    Voici mon programme :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    
    int main(int argc, char *argv[])
    {
          
    HANDLE hfind;
    WIN32_FIND_DATA wfd;
    
    // Initialise la recherche
    hfind = FindFirstFile("c:\\MesDocs\\*.o", &wfd);
    
    //Si quelque chose à été trouver
    if (hfind != INVALID_HANDLE_VALUE)
     {
    
     // Commence la boucle
     do
      {
    
      // Si ce n'est pas le répertoire courant DOS ...
      if (wfd.cFileName[0] != '.')
       {
       // Affiche le nom du fichier trouver
       printf ("%s\n", wfd.cFileName);
       }
    
    // Recherche le prochain
      }while (FindNextFile(hfind, &wfd));
    
      // Recherche terminer, ferme la recherche
      FindClose(hfind);
    
     // C'est terminer!!!
     printf ("Recherche terminee\n");
    
     }
    else
    {
    printf ("Aucun fichier trouve\n");
    //cout << "Aucun fichier n'a été trouver.\r";
    
    }
        
    system("PAUSE");	
    return 0;
    }

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut


    Le plus simple (mais non-thread-safe), c'est de faire un SetCurrentDirectory() et de rappeler la fonction, quand le fichier trouvé est un répertoire.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Désolé,je tacherais de mettre des balises la prochaine fois.
    Merci pour la piste, je vais essayer.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Comment savoir si un fichier est un répertoire ou bien un fichier".xx" ?

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Les répertoires possèdent l'attribut FILE_ATTRIBUTE_DIRECTORY, et il y a un champ pour les attributs dans la structure WIN32_FIND_DATA.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    ok merci

  7. #7
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par Médinoc Voir le message


    Le plus simple (mais non-thread-safe), c'est de faire un SetCurrentDirectory() et de rappeler la fonction, quand le fichier trouvé est un répertoire.
    Sans oublier de sauvegarder le répertoire courant avant de le changer, et de revenir à l'ancien répertoire courant après chaque appel de la fonction.

    L'autre méthode (thread-safe et pas plus compliquée que la première à mon avis) c'est passer le chemin du répertoire depuis lequel on appelé la fonction en paramètre de celle-ci.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Je suis toujours sur le même problème...
    Pour simplifier, je souhaite afficher tous les fichiers (dossiers ou non) à partir d'un répertoire racine.

    J'ai essayer d'introduire la récurssivité, mais mon programme ne fonctionne pas : je pense que c'est du au fait que mon "path" est toujours le même à chaque fois que la fonction est appelée.... mais je dois avouer que je m'y perd un peu.

    Est-ce-que quelqu'un peut me donner un petit coup de pouce ?

    Merci

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    #include <string.h>
    
    #define path "C:\\Documents and Settings\\Florian\\Mes documents\\les truc a moi\\epf\\3A\\LanguageC"
    #define anti "\\"
    
    // Prototype de la fonction
    void RechArborescence(HANDLE hfind);
    
    
    //____________________Programme principal___________________________________
    
    int main(int argc, char *argv[])
    {
    // Déclaration des variables      
    HANDLE hfind;
    WIN32_FIND_DATA wfd;
    hfind = FindFirstFile(path, &wfd); // Répertoire racine
    
    RechArborescence(hfind);
        
    system("PAUSE");	
    return 0;
    }
    
    //______________Définition de la fonction________________________________
    
    void RechArborescence(HANDLE hfind)
    {
    // Déclaration des variables
    WIN32_FIND_DATA wfd;     
         
    if (hfind != INVALID_HANDLE_VALUE)
      {
      do
        {
        if (wfd.cFileName[0] != '.')
          {
          // vérifie si c'est un répertoire ou non
          if ( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) 
            {
            printf("c'est un dossier :  ");
            printf ("%s\n", wfd.cFileName);
            // c'est la qu'on introduit notre récursivité
            strcat(path,anti);
            strcat(path,wfd.cFileName);
            RechArborescence(SetCurrentDirectory(path));
            }
          printf ("%s\n", wfd.cFileName);  
          }
        }while (FindNextFile(hfind, &wfd));
    
      // Recherche terminer, ferme la recherche
      FindClose(hfind);
      printf ("Recherche terminee\n");
      }
      
      else
        {
        printf ("Aucun fichier trouve\n");
        }
    }

Discussions similaires

  1. [facile] passage de variable entre 2 programmes
    Par jabal64 dans le forum Général Python
    Réponses: 7
    Dernier message: 08/12/2012, 00h28
  2. Passage de commandes à un autre programme
    Par hpccpp dans le forum C
    Réponses: 17
    Dernier message: 16/02/2009, 19h45
  3. Passage d'information entre deux programmes
    Par CTotophe85 dans le forum C++
    Réponses: 8
    Dernier message: 22/10/2008, 20h37
  4. Passage de paramètre à un programme sh
    Par vbcasimir dans le forum Linux
    Réponses: 3
    Dernier message: 12/10/2006, 15h29
  5. Passage d'une commande à un programme
    Par nicolas.pissard dans le forum C++Builder
    Réponses: 5
    Dernier message: 04/11/2003, 14h37

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