Pb de listage de fichiers

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 - 18 avril 2004 à 20:34
neohp Messages postés 62 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 14 octobre 2005 - 21 avril 2004 à 22:41
Bonsoir all,

Voila, j'ai un ptit pb concernant une fonction ki liste les fichiers d'un repertoire precis, je sais kil ne me resterait ka prendre une fonction ki fonctionne (c le K de le dire !;) sur ce mm site, mais j'en vois pas l'interet !
Donc voila, je poste le code, et si kelkun pouvait me trouver le BUG ! je vous remercie d'avance !
#include <stdio.h>
#include <windows.h>

int iListFile(char *);

void iListFile(char *sPath)
{
HANDLE hList;
WIN32_FIND_DATA wFile;

hList = FindFirstFile(sPath, &wFile);

while ((FindNextFile(hList, &wFile))) {
if (wFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
printf("Repertoire : \t%s\n", wFile.cFileName);
}else {
printf("Fichier : \t%s\n", wFile.cFileName);
}
}

FindClose(hList);
}

void main (int argc, char *argv[])
{
//Pour sauter le premier argument (qui est simplement le nom de l'application);
argc--;
argv++;

iListFile(*argv);

getc(stdin);
}

En argument, je passe bien "f:\*.*" (f car mon hdd n'est pas c !)...

Voila, je vous remercie !

Bonne prog

Alhexman

11 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
18 avril 2004 à 21:10
première erreur flagrante: les types de retour de la fonction et du prototype sont différents, or on ne peut pas surcharger sur le type de retour.
Mais as-tu un problème de compilation ou un bug à l'éxécution?
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
18 avril 2004 à 21:25
uè dsl, le type de retour dans le prototype a été changé au dernier momen, mais c pas de la ke provient le pb, c au cours de l'execution du prog, j'ai l'impression kil saute la boucle (enfin, ke les conditions ne sont pas respecté) car il atta l'appui d'une touche mais je ne vois vraiment pas pkoi !
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 avril 2004 à 21:55
FindFirstFile attend une chaine du type F:\\*.* et non F:\\.
N'oublie pas dans ton programme d'afficher le fichier obtenu avec FindFirstFile (si différent de INVALID_HANDLE_VALUE)
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
18 avril 2004 à 21:59
je pense que ce sera mieux comme ca:

void iListFile(char *sPath)
{
HANDLE hList;
WIN32_FIND_DATA wFile;

hList = FindFirstFile(sPath, &wFile);
if(hList != INVALID_HANDLE_VALUE)
{
do
{
if (wFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
printf("Repertoire : \t%s\n", wFile.cFileName);
}
else
{
printf("Fichier : \t%s\n", wFile.cFileName);
}
}while ((FindNextFile(hList, &wFile)));
}
0

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

Posez votre question
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
19 avril 2004 à 18:39
Je te remercie vecchio, mais ca marche tjrs pas kan je passe le chemin d'acces en argumen, alors ke si je declare une chaine de caracteres contenant le chemin d'acces, ca fonctionn...

Merci kan mm

++
0
neohp Messages postés 62 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 14 octobre 2005
19 avril 2004 à 22:09
voila une solution qui marche :

void lister(char *path)
{
WIN32_FIND_DATA wData;
HANDLE listing;
if( !((listing FindFirstFile(path, &wData)) INVALID_HANDLE_VALUE ) )
{
do
{
if( wData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
printf("Repertoire : \t%s\n", wData.cFileName);
else
printf("Fichier : \t%s\n", wData.cFileName);
}while(FindNextFile(listing, &wData)) ;
}
}

int main(int argc, char* argv[])
{
char rep[] = "c:\\*.*" ;

lister(rep) ;

return 0;
}

en fait, avoir ton source, je pense que le pb vient de ce bout de code :
argc--;
argv++;

iListFile(*argv);

sa me parait bizarre, j'vais essayer et je repost un com

A+
0
neohp Messages postés 62 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 14 octobre 2005
19 avril 2004 à 22:22
pour moi, le pb est resolu

le pb vient bien de la ou je pense :

dans mon source j'ai remplacé

argc--;
argv++;

iListFile(*argv);

par iListFile( argv[1] ) ; // le deuxieme argument sur la ligne

l'argument est de type c:\*.* et non pas de c:\\*.* :
en c, pour avoir la caractere '\', il faut le doubler dans un chaine, car '\' est un caractere d'echappement :

ex

char path[] = "c:\\*.*" ; // le chemin est c:\*.*

printf("le chemin est : %s\n", path) ;

te donnera a l'ecran

le chemin est : c:\*.*

bon apres la theorie je te met le source complet :
#include <stdio.h>
#include <windows.h>

void lister(char *path)
{
WIN32_FIND_DATA wData;
HANDLE listing;
if( !((listing FindFirstFile(path, &wData)) INVALID_HANDLE_VALUE ) )
{
do
{
if( wData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
printf("Repertoire : \t%s\n", wData.cFileName);
else 
printf("Fichier : \t%s\n", wData.cFileName);
}
while(FindNextFile(listing, &wData)) ;
}
}

int main(int argc, char* argv[])
{
lister(argv[1]) ; 

return 0;
}



voila si tu mets dans une commande dos :
nom_programe f:\*.*
sa marchera

voila j'espere que sa resoud ton problème ;)

++
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
20 avril 2004 à 18:10
Je te remercie vraiment vecchio, de t'etre attardé sur mon cas, entre autre...Je vais essayer de déterminer la cause du pb : argc--; argv++;
J'ai déja utilisé, ca fonctionnait, enfin bref, je te remercie beaucoup...

++ vecchio

Alhexman
0
neohp Messages postés 62 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 14 octobre 2005
21 avril 2004 à 01:11
hello...

non, ce n'etait pas vecchio, c'est moi hihi

argc--;
argv++;

iListFile(*argv);

en absolu, ce n'est pas faux ( quoique le argc-- sa sert a rien, ici) ..mais l'arithmétique de pointeur, c'est toujours delicat ...

c'est de tte facon , une solution pas très propre....

mais en effet j'ai tester dans mon source

lister(*(++argv)) ;

et sa marche parfaitement...

( s'a equivaut a
argv++ ;
lister(*argv) ;
)

voila j'espere que c'est ok maintenant

A+

neoh_p [=- coding spirit -=]
------- since 1999 ------
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
21 avril 2004 à 21:17
Oups, jsui dsl neohp pour le quiproquo...
Rendons a Cesar ce qui est a Cesar : merci neohp...

++

Bonne prog
0
neohp Messages postés 62 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 14 octobre 2005
21 avril 2004 à 22:41
Loolll

nan, c'est pas grave ....
je profitai juste de mon commentaire pour le remarqué...

bonne prog a toi :D
+

neoh_p [=- coding spirit -=]
------- since 1999 ------
0
Rejoignez-nous