Pb de listage de fichiers

Signaler
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
-
Messages postés
62
Date d'inscription
jeudi 5 juin 2003
Statut
Membre
Dernière intervention
14 octobre 2005
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
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?
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
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 !
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
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)
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
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)));
}
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
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

++
Messages postés
62
Date d'inscription
jeudi 5 juin 2003
Statut
Membre
Dernière intervention
14 octobre 2005

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+
Messages postés
62
Date d'inscription
jeudi 5 juin 2003
Statut
Membre
Dernière intervention
14 octobre 2005

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 ;)

++
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
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
Messages postés
62
Date d'inscription
jeudi 5 juin 2003
Statut
Membre
Dernière intervention
14 octobre 2005

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 ------
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Oups, jsui dsl neohp pour le quiproquo...
Rendons a Cesar ce qui est a Cesar : merci neohp...

++

Bonne prog
Messages postés
62
Date d'inscription
jeudi 5 juin 2003
Statut
Membre
Dernière intervention
14 octobre 2005

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 ------