Lister des dossiers

liam -  
 vincent -
bonjour tout le monde!

J'ai fais un peit prog pour lister mes cd de donnees. Je veux pouvoir mettre mon cd dans mon pc et ensuite avec mon prog, je veux pouvoir creer un fichier qui va contenir une sorte de mini base de donnee. Le prog marche tres bien quand je l'applique sur un dossier sur le disque dur, il parcours bien recursivement tous les dossiers. Par contre, quand je l'applique sur un cd, il ne marche pas recursivement... Voici la fonction quiparcours les dossiers et stocke mes fichiers dans une liste. Qqun pourait il m'aider?

static std::vector<t_data> create_FileList(std::string path, std::vector<t_data> list)
{
WIN32_FIND_DATA FindFileData;
   HANDLE hFind;
std::string tmp;

tmp = path + "\\*";
 hFind=FindFirstFile(tmp.c_str(), &FindFileData);

    do
{
if (strcmp(FindFileData.cFileName, ".")
&& strcmp(FindFileData.cFileName, "..")
&& (FindFileData.dwFileAttributes != FILE_ATTRIBUTE_HIDDEN))
{
if(FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY )
{
t_data data;
	
data.name = (LPCTSTR)FindFileData.cFileName;
data.dir = path;
data.type = "DIR";
				
list.push_back(data);

tmp = path + "\\" + (LPCTSTR)FindFileData.cFileName;
list = create_FileList(tmp, list)

}
else
{
t_data data;

data.name = (LPCTSTR)FindFileData.cFileName;
data.dir = path;
data.type = "FILE";
list.push_back(data);
}
}
}
while ( FindNextFile(hFind, &FindFileData) );

FindClose(hFind);
return list;
}

voila, dsl pour l'indentation!

9 réponses

teebo Messages postés 33570 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
Salut, moi il y a un truc qui me tracasse dans ton code (autre que l'indentation :-D), c'est que je ne vois pas ou il peut etre recursif!!!
Tu es sur qu'il est recursif sur C:? 8-)
A mon avis pour chacune de tes directories (donc dans ton while), il faut que tu refasses appel a ta fonction...

.  .
\_/
      Heeeeeeuuuuuuu

0
liam
 
Slt teebo,

si si il est recursif, je fais appel a ceci:
list = create_FileList(tmp, list);
des que je trouve un dossier, c'est a dire des que:
FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY.

La recursivite marche bien sur mon disque dur, mais elle ne marche pas quand je veux l'appliquer sur un cd... relou :(
0
teebo Messages postés 33570 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
Oops, autant pour moi je n'avais pas vu...Tu as essaye avec un breakpoint sur celle ligne la?

.  .
\_/
      Heeeeeeuuuuuuu
0
liam
 
ben oui, et il ne rentre pas dans la premiere condition, ni dans la seconde... donc il ne les considere ni comme des dossiers, ni comme des fichiers... il ne me reste qu'a lui dire via mon directory browser de rentrer dans chaque dossier a la main... C'est tjrs une solution mais c'est vrai que ca aurait ete mieux si ca c'etait fait tt seul. Je continue qd meme a chercher un peu. Dans tous les cas, merci pour ton aide!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
teebo Messages postés 33570 Date d'inscription   Statut Modérateur Dernière intervention   1 793
 
Tu peux peut etre essayer avec ca non?

CFileFind::IsDirectory
BOOL IsDirectory( ) const;

.  .
\_/
      Heeeeeeuuuuuuu
0
liam
 
ben je ne connaissais pas... Je vais essayer et je te tiens au courant! Merci beaucoup.
0
gallagher Messages postés 5 Statut Membre
 
ca marche! Merci beaucoup teebo! En plus c bien plus simple
que la methode que j'utilisais avant...

liam
Etudiant en info (EPITA)
0
gisles
 
interressant comme programme tu l'appliques sur quel logiciel ou comment ca marche, ca pourrait etre pas mal pour creer mopi aussi des listes automatiques...merci
0
gallagher Messages postés 5 Statut Membre
 
slt gisles,

mon programme me sert a gerer mes mp3. Il cree un liste de tous mes mp3 (et pour cela, je dois inserer un par un tous mes cd de mp3), et il me permet de faire un recherche dans cette liste. J'en avais marre de pas savoir ce qu'il y avait sur mes cd... Maintenant c'est regle ;)

liam
Etudiant en info (EPITA)
0
vincent
 
salut,

pourrais je avoir une copie complete du projet stp??

ca peux toujours servir
0