Problème : répertoire, fichiers et récursivitée.

Résolu
yserver Messages postés 203 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 8 septembre 2006 - 16 déc. 2005 à 11:25
yserver Messages postés 203 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 8 septembre 2006 - 16 déc. 2005 à 14:02
Bonjour,
Cette fonctions marche très bien, mais produit une sortie inattendu pour moi. J'ai beau chercher je ne trouve pas la raison de ce résultat.
ulNbRep est toujours correct, mais ulNbFichiers est toujours égale au nombre de fichiers plus le nombre de répertoire réellement présent à l'emplacement analysé.

//ulNbFichiers et ulNbRep sont des variable globales
void Count_Files (char cRep[512])
{
//Déclaration des variables
char cChemin [512];
char cTemp [2];
WIN32_FIND_DATA wData;
HANDLE hFind;


//Initialisation des variables
//Ajout de *.* cChemin
sprintf ( cChemin , "%s*.*" , cRep) ;
//Initialisation du Handle de recherche de fichiers
hFind = FindFirstFile(cChemin, &wData);
//Suppresion de *.* a cChemin
strcpy(cChemin, cRep);


if (hFind != INVALID_HANDLE_VALUE)
{
do
{
MessageBox(NULL, wData.cFileName, "Fichier", NULL);
if ((strcmp(wData.cFileName, "..")) && (strcmp(wData.cFileName, ".")))
{
//Si C'est un répertoire
if (wData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
//puisque c'est un repertoire, on recupere la nouvelle adresse, et on va rentrer dedans...
sprintf (cChemin , "%s%s\",cRep ,wData.cFileName);
//On rappelle la fonction pour qu'elle analyse le sous répertoire
Count_Files(cChemin);
ulNbRep ++;
// revient un repertoire en arriere
strcpy(cChemin,cRep);
}
//Si non c'est un fichier
else
// ce n'est pas un répèrtoire donc le fichier est analysé
sprintf ( cChemin , "%s%s" , cRep , wData.cFileName );
ulNbFichiers ++;
}
} while ( FindNextFile ( hFind , &wData ) ) ;
}
FindClose( hFind );
}


Merci de votre aide.

6 réponses

fredcl Messages postés 547 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 7 octobre 2007 1
16 déc. 2005 à 11:49
Bonjour,






<meta http-equiv= "Content-Type" content="text/html; charset=UTF-8">
<meta name="Generator" content="Kate, the KDE Advanced Text Editor">

else
{
// ce n'est pas un r




<meta http-equiv ="Content-Type" content="text/html; charset=UTF-8">
<meta name="Generator" content="Kate, the KDE Advanced Text Editor"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">



<meta name="Generator" content="Kate, the KDE Advanced Text Editor">

sprintf ( cChemin , "%s%s" , cRep , wData.cFileName );
ulNbFichiers ++;
}

Manque { après else et } après ulNbFichiers++


Cordialement

Fred Cailleau-Lepetit (http://cfred.free.fr)
3
yserver Messages postés 203 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 8 septembre 2006
16 déc. 2005 à 11:55
Merci beaucoup, c'est parfait.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 déc. 2005 à 12:36
if((strcmp(wData.cFileName, "..")) && (strcmp(wData.cFileName, "."))) {


A remplacer avantageusement par:
if(wData.cFileName[0] != '.') {

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
yserver Messages postés 203 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 8 septembre 2006
16 déc. 2005 à 13:27
BruNews, merci pour l'info. Mais peux tu me dire pourquoi.

Merci de votre aide.
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 déc. 2005 à 14:01
ben pour la vitesse et taille code.
1 seule instruction
cmp byte ptr cFileName[0], '.'
jne LABEL
absolument imbattable et vu que le résultat est le même, pas de raison de se priver.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
yserver Messages postés 203 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 8 septembre 2006
16 déc. 2005 à 14:02
Merci
0
Rejoignez-nous