Recursivite

elanspeech Messages postés 43 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 3 septembre 2005 - 24 avril 2004 à 03:01
elanspeech Messages postés 43 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 3 septembre 2005 - 24 avril 2004 à 12:17
Bonjour,

j'arrive a lister le contenu d'un repertoire avec cette fonction. Cependant, la recursion ne fonctionne pas. J'ai tente en vain de concatener la chaine source avec le fichier 'nom' trouve. mais ca ne marche pas.

Qqn pourrait m'aider ?

Merci.

void lister(LPCTSTR fichier, SOCKET s)
{
WIN32_FIND_DATA wData;
char nom[MAX_PATH];

HANDLE listing;
listing = FindFirstFile(fichier, &wData);

while((FindNextFile(listing, &wData)))
{
nom = wData.cFileName;
lister(nom, s);
cout
<< nom << endl;
}
}

4 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
24 avril 2004 à 11:12
ca ne sert a rien de rappeeler lister(nom, s), sauf si nom est un dossier
dans ce cas
fichier -= 3; // enlève *.*
strcat(fichier, nom);
strcat(fichier, "*.*"); // suppose qu'il y a assez de place dans fichier
lister(fichier, s)
0
elanspeech Messages postés 43 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 3 septembre 2005
24 avril 2004 à 11:36
a la compilation, j'ai l'erreur suivante :

passing `const TCHAR *' as argument 1 of `strcat(char *, const char *)' discards qualifiers

une idee ?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
24 avril 2004 à 12:03
c'est normal, tu as déclaré le parametre fichier come constant (LPCTSTR); mais de toute facon je m'étais trompé, montruc ne marche pas (fichier -= 3;).
Voila un truc qui devrait marcher:

[code]
void lister(LPCTSTR fichier)
{
WIN32_FIND_DATA wData;

HANDLE listing;
listing = FindFirstFile(fichier, &wData);

if(listing != INVALID_HANDLE_VALUE)
{
do
{
if(wData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(wData.cFileName[0] != '.') // évite . et ..
{
char fichier2[MAX_PATH];
int n = (int)strlen(fichier);
strncpy(fichier2, fichier, n - 3); // enleve *.*
fichier2[n - 3] = 0;
strcat(fichier2, wData.cFileName);
strcat(fichier2, "\\*.*");
lister(fichier2);
}
}
else
cout << wData.cFileName << endl;
} while((FindNextFile(listing, &wData)));
}
}
[code]
0
elanspeech Messages postés 43 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 3 septembre 2005
24 avril 2004 à 12:17
ca marche !

Merci.
0
Rejoignez-nous