Savoir si un fichier un est repertoire

Signaler
Messages postés
1
Date d'inscription
lundi 30 janvier 2006
Statut
Membre
Dernière intervention
3 mars 2006
-
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006
-
J'utilise une structure du type WIN32_FIND_DATA File, pour un parcours de fichiers. Mais je n'arrive pas a parcourir les sous dossier. Apparamment il faut comparer, DWORD [ dwFileAttributes] et TCHAR [ cFileName][MAX_PATH] pour savoir si c'est un répertoire, mais je ne sais pas comment les comparer.
Merci de m'aider.

3 réponses

Messages postés
126
Date d'inscription
jeudi 5 juin 2003
Statut
Membre
Dernière intervention
11 juillet 2006

Bonjour

par exemple

WIN32_FIND_DATA wfd;
hfind = FindFirstFile ( thepath, &wfd );
if (hfind != INVALID_HANDLE_VALUE)
{
do
{
if( wfd.cFileName[0] != '.')
{
if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{ // C'est un repertoire
}
else
{
//c'est un fichier
}
}

}while(FindNextFile( hfind, &wfd));
FindClose(hfind);

Cordialement
TOCHE
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006

Bonjour
Voici un petit exemple d'utilisation de FindFirstFile() FindNextFile() qui permet de parcourir un repertoire et tous ces sous repertoire. C'est tiré d'une classe que j'ai faite. Les commentaires doivent suffire.

void CRepertoire::ScanRep (char *cRepertoire)
{
//Déclaration des variables
char cChemin [512];
DWORD dwTaille;
WIN32_FIND_DATA wData;
HANDLE hFind;


//Initialisation des variables
//Ajout de \*.* cChemin
strcpy(cChemin, cRepertoire); strcat(cChemin, "\\*.*");
//Initialisation du Handle de recherche de fichiers
hFind = FindFirstFile(cChemin, &wData);
//Suppresion de \*.* a cChemin
strcpy(cChemin, cRepertoire);

if (hFind != INVALID_HANDLE_VALUE)
{
do
{
if(wData.cFileName[0] != '.')
{
//Increment la barre de progression

//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...
strcpy(cChemin, cRepertoire); strcat(cChemin, "\"); strcat(cChemin, wData.cFileName);
//On rappelle la fonction pour qu'elle analyse le sous répertoire
ScanRep(cChemin);
ulNbRep ++;
// revient un repertoire en arriere
strcpy(cChemin, cRepertoire);
}
//Si non c'est un fichier
else
{
// ce n'est pas un répèrtoire donc le fichier est analysé
strcpy(cChemin, cRepertoire); strcat(cChemin, "\"); strcat(cChemin, wData.cFileName);
ulNbFichiers ++;
dwTaille = (wData.nFileSizeHigh * (MAXDWORD+1)) + wData.nFileSizeLow;
ulTailleMo += (int)(dwTaille/1048576);
}
}
} while ( FindNextFile ( hFind , &wData ) ) ;
}
FindClose( hFind );
}

Bon courrage.