Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
727 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Passage en récurssif d'un programme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Passage en récurssif d'un programme

n°1880346
nairolff
Posté le 03-05-2009 à 18:21:19  profilanswer
 

Bonjour,
 
 
Je souhaite créer un programme récurssif qui permet d'afficher tous les fichiers (dossiers ou non) à partir d'un répertoire racine.
Pour cela j'utilise l'API Windows.
 
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 :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. #include <string.h>
  5. #define path "C:\\Documents and Settings\\Florian\\Mes documents\\les truc a moi\\epf\\3A\\LanguageC"
  6. #define anti "\\"
  7. // Prototype de la fonction
  8. void RechArborescence(HANDLE hfind);
  9. //____________________Programme principal___________________________________
  10. int main(int argc, char *argv[])
  11. {
  12. // Déclaration des variables       
  13. HANDLE hfind;
  14. WIN32_FIND_DATA wfd;
  15. hfind = FindFirstFile(path, &wfd); // Répertoire racine
  16. RechArborescence(hfind);
  17.    
  18. system("PAUSE" );
  19. return 0;
  20. }
  21. //______________Définition de la fonction________________________________
  22. void RechArborescence(HANDLE hfind)
  23. {
  24. // Déclaration des variables
  25. WIN32_FIND_DATA wfd;   
  26.    
  27. if (hfind != INVALID_HANDLE_VALUE)
  28.   {
  29.   do
  30.     {
  31.     if (wfd.cFileName[0] != '.')
  32.       {
  33.       // vérifie si c'est un répertoire ou non
  34.       if ( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
  35.         {
  36.         printf("c'est un dossier :  " );
  37.         printf ("%s\n", wfd.cFileName);
  38.         // c'est la qu'on introduit notre récursivité
  39.         strcat(path,anti);
  40.         strcat(path,wfd.cFileName);
  41.         RechArborescence(SetCurrentDirectory(path));
  42.         }
  43.       printf ("%s\n", wfd.cFileName); 
  44.       }
  45.     }while (FindNextFile(hfind, &wfd));
  46.   // Recherche terminer, ferme la recherche
  47.   FindClose(hfind);
  48.   printf ("Recherche terminee\n" );
  49.   }
  50.  
  51.   else
  52.     {
  53.     printf ("Aucun fichier trouve\n" );
  54.     }
  55. }

mood
Publicité
Posté le 03-05-2009 à 18:21:19  profilanswer
 

n°1880819
Dagnir
El Che vive
Posté le 04-05-2009 à 21:40:44  profilanswer
 

Quand tu dis que ton programme ne marche pas, il fait quoi précisemment pour pas marcher ?
Déjà ca serait pas un == quand tu teste si c'est un dossier ?
 

nairolff a écrit :

Code :
  1. //______________Définition de la fonction________________________________
  2. void RechArborescence(HANDLE hfind)
  3. {
  4. // Déclaration des variables
  5. WIN32_FIND_DATA wfd;   
  6.    
  7. if (hfind != INVALID_HANDLE_VALUE)
  8.   {
  9.   do
  10.     {
  11.     if (wfd.cFileName[0] != '.')
  12.       {
  13.       // vérifie si c'est un répertoire ou non
  14.       if ( wfd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )
  15.         { [...] }



 


---------------
Nous vous souhaitons de beaux rêves, c'est le cinéma gratuit.
n°1880830
tpierron
Posté le 04-05-2009 à 21:57:21  profilanswer
 

:sweat: Hmmm, va falloir revoir deux ou trois trucs sur les bases du C avant de voir l'API win32.
 
Si ça ne te choques pas ces lignes, c'est qu'il te manque des notions essentielles :

Code :
  1. #define path "C:\\Documents and Settings\\Florian\\Mes documents\\les truc a moi\\epf\\3A\\LanguageC"
  2. [...]
  3. strcat(path,anti);
  4. strcat(path,wfd.cFileName);

n°1880887
Dagnir
El Che vive
Posté le 05-05-2009 à 01:39:46  profilanswer
 

C'est brouillon, curieusement ca marche pas sur tous les dossiers ( :??: ) mais il est tard, j'ai pas mieux.

Code :
  1. // FolderList.cpp : Defines the entry point for the console application.
  2. //
  3. #include "stdafx.h"
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <windows.h>
  7. #include <string.h>
  8. typedef const wchar_t* LPCWSTR;
  9. LPWSTR path = (LPWSTR)L"E:\\Dagnir\\Music";
  10. // Prototype de la fonction  
  11. void RechArborescence(LPWSTR , int );
  12. //____________________Programme principal___________________________________  
  13. int main(int argc, char *argv[])
  14. {
  15. // Déclaration des variables       
  16. HANDLE hfind;
  17. WIN32_FIND_DATA wfd;
  18. int alinea = 1; //pour la mise en page
  19. hfind = FindFirstFile(path, &wfd); // Répertoire racine  
  20. wprintf(L"%s\n\n", wfd.cFileName);
  21. RechArborescence(path, alinea);
  22.  
  23. system("PAUSE" );
  24. return 0;
  25. }
  26. //______________Définition de la fonction________________________________  
  27. void RechArborescence(LPWSTR path, int n)
  28. {
  29. WCHAR dir[256];
  30. wsprintf(dir, path);
  31. LPWSTR ant = (LPWSTR)L"\\*.*";
  32. wcscat_s(dir, ant);
  33. WIN32_FIND_DATA wfd;
  34. HANDLE hfind = FindFirstFile(dir, &wfd);
  35.  
  36. while (FindNextFile(hfind, &wfd))
  37. {
  38.  if (wfd.cFileName[0] != '.')
  39.  {
  40.   for(int k=0; k<n; k++) printf("\t" );
  41.   wprintf(L"%s\n", wfd.cFileName);
  42.   // vérifie si c'est un répertoire ou non  
  43.   if ( wfd.dwFileAttributes == 8208 )
  44.   {
  45.    // c'est la qu'on introduit notre récursivité
  46.    wsprintf(dir, L"%s\\%s", path, wfd.cFileName);
  47.    RechArborescence(dir, n+1);
  48.   }       
  49.         }
  50.     }
  51. // Recherche terminer, ferme la recherche  
  52. FindClose(hfind);
  53. }


 
Ca sort un semblant d'arborescence.


---------------
Nous vous souhaitons de beaux rêves, c'est le cinéma gratuit.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Passage en récurssif d'un programme

 

Sujets relatifs
Petite aide sur un programme :(:(?Assigner Programme/Action à une touche de la
Problème sur un programme VBA lorsqu'on ouvre 2 fichiers excelProgramme en Fortran 95
créer projet à partir de code sous visual studio 2008 [10€!]Passage d'une fonction sans paramètre en paramètre d'une autre[résolu]
Programme récursif[BATCH] lancement de programme, validation automatique
[MAPLE] Programme de musique generation dune partition (débutant)Programme DOS
Plus de sujets relatifs à : Passage en récurssif d'un programme


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR