lire un dossier récursivement
Bonjour,
je suis entrain de faire un code qui me permettrais d'affichier ce qu'il ya dans un dossier récursivement c'est à dire il doit m'afficher le contenu du dossier que je lui donne et le contenu des sous dossiers aussi.
Donc j'ai fait un code mais la récursivité ne marche pas. Alors aidez moi à comprendre svp.
Code:
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
| #include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <dirent.h>
#ifdef WIN32
#include <sys/types.h>
#define CLEAR "cls"
#endif
///***************************************************Declaration des fonctions**************************************///
int isDir(char* s);
void lire(char* s);
void lireDossier(char* s, DIR* rep);
void parcourirDossier(DIR* rep, char* chemin);
///******************************************************************************************************************
//************fonction main ********************************
int main()
{
DIR* rep = NULL;
char chemin[500] = "";
printf("quel est le chemin du repertoire ?\n");
scanf("%s",chemin);
parcourirDossier(rep, chemin);
closedir(rep);
return 0;
}//******** fin de la fonction main*************
// **********on test si c'est un dossier ou un fichier************
int isDir(char* path)
{
if ((strchr(path, '.')) == NULL) // Si le nom du chemin n'a pas de point (une extension).
return 1;
else
return 0;
}//***************************************************************
//****************lecture du chemin*******************************
void lire(char* newPath)
{
char *enter = NULL;
char temp[100] = ""; // Chaîne de caractères temporaire contenant la saisie de l'utilisateur.
//printf("quel est le chemin du repertoire ?\n");
// fgets(temp, 99, stdin);
temp[100] =newPath;
enter = strchr(temp, '\n');
if (enter != NULL)
*enter = '\0';
strcat(newPath, temp); // On ajoute à la suite le nom du dossier pour obtenir quelque chose comme C:/nom/nom/ pour Win
}//*********************************************************************************
//***************** lecture et affichage du repertoire courant ****************************
void lireDossier(char* chemin, DIR* rep)
{
char chem[500]="";
struct dirent* ent = NULL;
// printf(" -- Lecture du dossier '%s' -- \n", newPath);
while ((ent = readdir(rep)) != NULL)
{
if (strcmp(ent->d_name, ".")!=0 && strcmp(ent->d_name, "..")!=0)
{
// if (strchr(ent->d_name, '.')== NULL)//retourne null si le nom n'a pas de point
// {
strcpy(chem, chemin );
strcat(chem,"\\");
strcat(chem, ent->d_name);
printf("%s\n", chem);
// }
//else {
// lireDossier(ent->d_name, rep);
// }
}
}
// printf("\n\n -- Que voulez-vous ouvrir -- ?\n");
}//****************************************************************************************
//****************Parcour récursif des dossier et des sous dossiers************************
void parcourirDossier(DIR* rep, char* chemin)
{
lire(chemin); // Lecture du nouveau chemin;
if (!isDir(chemin))
{
lireDossier(chemin, rep);
}
else
{
rep = opendir(chemin);
if (rep == NULL)
{
printf("Le dossier '%s' n'a pas pu etre ouvert", chemin);
exit(-1);
}
else{
parcourirDossier(rep, chemin);
}
}
closedir(rep); //Fermeture du répertoire.
}//******************************************************************************************** |