Recuperer le contenu d un dossier en C

Résolu
Signaler
Messages postés
16
Date d'inscription
lundi 5 avril 2004
Statut
Membre
Dernière intervention
9 février 2005
-
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006
-
Bien le bonjour,


J ai une nouvelle colle a vous poser : comment puis-je faire pour recuperer le contenu d un dossier de mon choix, en C?


Merci d avance

Ptlpn 0o.

3 réponses

Messages postés
37
Date d'inscription
jeudi 27 mars 2003
Statut
Membre
Dernière intervention
6 mai 2005

salut,



regarde :

sous dos : opendir() puis readdir()

sous windows FindFirstFile() puis FindNextFile()
Messages postés
178
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
6 juillet 2009
4
Il faut pour cela créer une fonction qui va rentrer dans le répertoire que tu as choisis.
Elle va ensuite regarder le 1er élément :
- si c'est un dossier, elle rentre dedans, puis elle parcours à nouveau ce dossier en appelant la fonction que tu as créee (récursivité), etc...
- si c'est un fichier, tu récupère le nom du fichier, et tu fais ce que tu veux avec :)
J'ai déjà fait cette fonction, en C++, et j'ai trouvé la source sur cppfrance. (en fait, je l'ai modifiée car elle ne me donnait pas assez d'info pour mon prog !) :
http://www.cppfrance.com/codes/SCANDISC_SIMPLE_POUR_LISTER_LE_CONTENU_DUN_REPERTOIRE_-_DES_SOUS-REPERTOIRES-/22116.aspx
Je ne peux pas t'assurer qu'elle fonctionne en C, mais mon raisonnement est celui que tu doit appliquer pour obtenir un bon résultat.


Néo020585

La programmation, c'est l'art de découvrir
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006

Voila un exemple de fonction qui supprime tous les fichiers et repertoires d'un repertoire passé en parametre

//---------------------------------------------------------------------------
//Suppression récursive des fichiers d'un repertoire
void fSupp_Files ( char f_Rep [ 512 ] )
{
//Déclaration des variables
char f_Chemin [ 512 ] ;
WIN32_FIND_DATA wData ;
HANDLE f_Find ;

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

if ( f_Find != INVALID_HANDLE_VALUE)
{
do
{
if ( ( strcmp (wData.cFileName , "..") ) && ( strcmp (wData.cFileName, ".") ) )
{
if ( wData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
{
//puisque c'est un repertoire, on recupere la nouvelle adresse, et on va rentrer dedans...
sprintf ( f_Chemin , "%s%s\", f_Rep , wData.cFileName ) ;
//On rappelle la fonction pour qu'elle supprime les fichiers du répèrtoire
fSupp_Files ( f_Chemin ) ;
RemoveDirectory ( f_Chemin ) ;

// reviens un repertoire en arriere
int j = strlen ( f_Chemin ) - 2 ;
while ( j > 0 )
{
if ( f_Chemin [ j ] == '\\' )
{
f_Chemin [ j+1 ] = '\0' ;
break ;
}
j -- ;
}
}
else // ce n'est pas un répèrtoire donc le fichier est supprimé
sprintf ( f_Chemin , "%s%s" , f_Rep , wData.cFileName ) ;
DeleteFile ( f_Chemin ) ;

}
} while ( FindNextFile ( f_Find , &wData ) ) ;
}
FindClose( f_Find );