Passage en récurssif d'un programme

Passage en récurssif d'un programme - C - Programmation

Marsh Posté le 03-05-2009 à 18:21:19    

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. }

Reply

Marsh Posté le 03-05-2009 à 18:21:19   

Reply

Marsh Posté le 04-05-2009 à 21:40:44    

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.
Reply

Marsh Posté le 04-05-2009 à 21:57:21    

: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);

Reply

Marsh Posté le 05-05-2009 à 01:39:46    

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.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed