Explorer un repertoire [C/C++] - C++ - Programmation
Marsh Posté le 09-07-2002 à 22:22:57
Va faire un tour du côté de findfirst & findnext, un ch'ti coup de récursion et l'tour est joué 
Marsh Posté le 09-07-2002 à 22:45:06
Wow, incroayble la rapidite de la reponse !!! 
 
Bon, je file voir ceci  
  
 
merci bcp, je sens que je vais dormir + que 3 heures cette nuit c'est chouette  !!!
 !!!
Marsh Posté le 10-07-2002 à 00:40:16
Bon, voila c'est 1h00 ca marche toujours pas, j'en suis a mon 3eme café, je sais toujours pas pourquoi ca marche pas.... 
 
#include <iostream.h> 
#include <windows.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
 
 
void lister(LPCTSTR file); 
 
void main() 
{ 
    lister("*.*" ); 
} 
 
void lister(LPCTSTR fichier) 
{ 
 
    char *new_path=""; 
    WIN32_FIND_DATA wData; 
    char nom[MAX_PATH]; 
    HANDLE listing; 
    listing = FindFirstFile(fichier,    &wData); 
     
    while((FindNextFile(listing, &wData))) 
     { 
       if(wData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY ){ 
 
       cout << "DIRECTORY : " << wData.cFileName<< "\n"; 
       new_path=wData.cFileName; 
       strcat(new_path,"\\*" ); 
 
          lister(new_path); 
       } 
       else 
       cout << "FILE : " << wData.cFileName<< "\n"; 
     } 
}    
 
Si je le lance des la racine, il boucle sans fin ( il alterne entre la 1er directory et ".." j'ai beau tester avant de lancer ma recursivité si je la lance sur ".." il n'y a rien a faire.... 
 
Doit y avoir un truc qui m'echappe la......tiens c'est quoi ce petit mec tout vert qui sort d'une soucoupe ?!
Marsh Posté le 10-07-2002 à 03:20:22
ben heuh, ca me semble normale, vu que dans un rep il y a tjs les rep "." et ".." 
donc quand tu fais ta recursion fait gaffe a pas visiter ces reps 
 
Ensuite, deux trucs: 
 
1) pourquoi tu regarde pas le fichier retourné par findFirstFile ? tu attaque directmeent avec celui donné par findNextFile 
 
2) perso je remplacerais  
if(wData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY ) 
par 
if( (wData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )!=0) 
 
ca peut t'eviter des blagues si ton rep a des attributs (genre archive) 
 
 
 
 
 
Marsh Posté le 10-07-2002 à 09:27:06
Tous d'abord, merci a tous ceux qui ont repondu. 
 
Pour mon probleme de la recursivite, j'ai bien essaye de mettre 
 
if( new_patch != "..\*.*" ) 
lister(new_path);  
 
Pour eviter de "remonter" mon arborescence, le probleme c'est que ce test est toujours vrai.....meme en utilisant strcmp ! 
 
 
 
 
      
Marsh Posté le 10-07-2002 à 09:29:06
if(wData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY ) 
 
if( (wData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )!=0) 
 
?! A, la je comprends pas la notation, le "&" c'est pas un "et" logique "&&" ?! 
Marsh Posté le 10-07-2002 à 13:46:53
| bartleby a écrit a écrit  : Tous d'abord, merci a tous ceux qui ont repondu. Pour mon probleme de la recursivite, j'ai bien essaye de mettre if( new_patch != "..\*.*" ) lister(new_path); Pour eviter de "remonter" mon arborescence, le probleme c'est que ce test est toujours vrai.....meme en utilisant strcmp ! | 
 
 
heuh attention ! 
 
deja il FAUT utiliser strcmp pour comparer des chaines de caracteres  
Ensuite strcmp te renvoie 0 si ls chaines sont identiques 
 
 
Marsh Posté le 10-07-2002 à 23:43:12
| bartleby a écrit a écrit  : if(wData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY ) if( (wData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )!=0) ?! A, la je comprends pas la notation, le "&" c'est pas un "et" logique "&&" ?! | 
 
 
J'imagine que "wData.dwFileAttributes" est une variable plein de flags. Du style: 
00001010 
si le 5ieme bit est l'attribut "directory", alors tu testes avec un "&": 
  00001010 <- dwFileAttributes 
& 00001000 <- FILE_ATTRIBUTE_DIRECTORY 
----------- 
  00001000 
 
resultat: non nul, donc directory
Marsh Posté le 09-07-2002 à 22:18:28
Bonjour a tous,
 
 
Je cherche a faire une operation sur tout les fichiers d'un certain type ( vxml) dans tout les fichiers present dans la sous arborescence d'un repertoire.
Bon, en gros mon seul probleme c'est d'arriver a parcourir les repertoires.
J'ai bien pensé a lancer mon programme avec l'argument '*', mais la liste que j'obtiens ne fais pas la difference entre les repertoires et les fichiers !!! Y a-t-il une solution pour avoir les fichiers dans un tableau et les repertoires dans un autre ?!
Merci d'avance