VTS_35
Messages postés17Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention18 mai 2004
-
22 avril 2004 à 08:43
VTS_35
Messages postés17Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention18 mai 2004
-
22 avril 2004 à 09:48
Bonjour, j'ai un petit prrblème de gestion des répertoires. Sous Linux, y'avait pas de problème, mais là, je suis obligé de taffer sous windows et C le foutoir.
Le truc que je voudrais faire, C de lister tout les fichiers et sous répertoires à partir d'un répertoire donné. Bon, là, G déjà trouvé sur le forum une fonction qui s'en occupait :)
Mais le problème, C que je voudrais rendre cette fonction récursive! (pourpouvoir tout lister dans un fichier...)
Et là, y'a tout qui plante!
Bon, voici mon code pour la fonction de listage des répertoires (au fait, m'en voulez pas si C pas du code 'propre', je bricole un peu, ça fait longtemps que je m'y suis pas remis! ^^)
// fonction qui liste un répertoire //
string listerRep(string rep){
ostream os;
int f = 0; //nombre de fichier
int r = 0; //nombre de répertoires
HANDLE hfind; //va contenir le handle(identificateur) de la recherche
WIN32_FIND_DATA wfd; //va contenir les infos de la recherche
char* tmp;
strcpy(tmp,rep.c_str());
strcat(tmp,"*.*");
cout << tmp << endl;
//lance la recherche
hfind = FindFirstFile(tmp,&wfd);
//si rien n'a été trouvé, INVALID_HANDLE_VALUE est retourné
if (hfind != INVALID_HANDLE_VALUE){
while(FindNextFile(hfind, &wfd))//poursuit la recherche
{
//on ignore les repertoires courant ou précédent (. ou ..)
if (wfd.cFileName[0] != '.')
{
//vérifie si C un répertoire ou non
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
//c'est un répertoire
//cout << "Repertoire: " << wfd.cFileName << "\n";
os << listerRep(wfd.cFileName);
r++;
} else {
//c'est un fichier
cout << "FICHIER: " << wfd.cFileName << "\n";
f++;
tmp = wfd.cFileName;
}
} else {
tmp = "pas de sous répertoire";
}
}
//recherche terminée, ferme la recherche
FindClose(hfind);
} else {
tmp = "false";
}
return tmp;
}
Voilà, si vous pouviez me dire ce qui ne va pas, je vous serait très reconnaissant.
VTS_35
Messages postés17Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention18 mai 2004 22 avril 2004 à 08:47
Y'a pas moyen d'éditer ses messages!
bon, je recomence, G pris une mauvaise version (y'a un ostream qui squatte! ;) )
// fonction qui liste un répertoire //
string listerRep(string rep){
int f = 0; //nombre de fichier
int r = 0; //nombre de répertoires
HANDLE hfind; //va contenir le handle(identificateur) de la recherche
WIN32_FIND_DATA wfd; //va contenir les infos de la recherche
char* tmp;
strcpy(tmp,rep.c_str());
strcat(tmp,"*.*");
//lance la recherche
hfind = FindFirstFile(tmp,&wfd); //prend en parametre un char* et pas un string!
//si rien n'a été trouvé, INVALID_HANDLE_VALUE est retourné
if (hfind != INVALID_HANDLE_VALUE){
while(FindNextFile(hfind, &wfd))//poursuit la recherche
{
//on ignore les repertoires courant ou précédent (. ou ..)
if (wfd.cFileName[0] != '.')
{
//vérifie si C un répertoire ou non
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
//c'est un répertoire
//cout << "Repertoire: " << wfd.cFileName << "\n";
tmp = listerRep(wfd.cFileName);//là, ça marche pas!
//En fait, listerRep ne retourne pas vraiment un type string
r++;
} else {
//c'est un fichier
cout << "FICHIER: " << wfd.cFileName << "\n";
f++;
tmp = wfd.cFileName;
}
} else {
tmp = "pas de sous répertoire";
}
}
//recherche terminée, ferme la recherche
FindClose(hfind);
} else {
tmp = "false";
}
return tmp;
}