Savoir si un fichier un est repertoire

poktopok Messages postés 1 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 3 mars 2006 - 3 mars 2006 à 12:34
yserver Messages postés 203 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 8 septembre 2006 - 4 mars 2006 à 09:08
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

ricky78 Messages postés 126 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 11 juillet 2006
3 mars 2006 à 12:57
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
3 mars 2006 à 12:58
0
yserver Messages postés 203 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 8 septembre 2006
4 mars 2006 à 09:08
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.
0
Rejoignez-nous