1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| #include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
/* Il manque ceci : */
#include <stdlib.h>
#include <string.h>
void affiche_repertoire(char repertoire[]);
int main(void)
{
char repertoire[]=".";
affiche_repertoire(repertoire);
system("PAUSE");
return 0;
}
void affiche_repertoire(char repertoire[]) {
struct dirent *lecture;
DIR *rep;
rep = opendir(repertoire);
/* Il faut tester rep */
if(rep != NULL)
{
printf("___________________________\n");
/* Correct mais dangereux, préféré :
while (lecture = readdir(rep))
*/
while ( (lecture = readdir(rep)) != NULL)
{
/* Pas portable, sous linux les fichiers non pas forcément de . et
les répertoires peuvent en avoir
Sous windows aussi, moins courant mais possible (pour les répertoires, je n'ai pas testé)
*/
if(strchr(lecture->d_name, '.')==NULL) {
char *chaine=NULL;
/* Faux, à mon avis tu voulais :
chaine=malloc(strlen(lecture->d_name + 2));
*/
chaine=malloc(strlen(lecture->d_name) + 2);
/* Faudrait ajouter la chaine repertoire, non? et pour cela il faut changer le malloc ...*/
strcpy(chaine,"/");
strcat(chaine, lecture->d_name);
printf(" Repertoire %s : \n", chaine);
affiche_repertoire(chaine);
free(chaine);
}
else {
printf("FICHIER: %s\n", lecture->d_name);
}
}
printf("___________________________\n");
closedir(rep);
}
} |