IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

lire un dossier récursivement


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
     
     
    }//********************************************************************************************

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2003
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2003
    Messages : 75
    Par défaut
    Je vois une erreur ligne 47: temp est un tableau de 100 char, tu peux utiliser temp[0] à temp[99], temp[100] est en dehors du tableau.

    De plus tu essaies de convertir un char * en char.

    Il faut utiliser strcpy(temp, newPath);

    Je n'ai pas été plus loin, mais il faut utiliser des printf pour afficher ce que fait le programme et localiser l'erreur de manière plus précise que "ca ne marche pas comme prévu", trouve à quelle ligne le programme ne fait plus ce que tu attendrais.

  3. #3
    Membre actif Avatar de Waether
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 44
    Par défaut
    Personnelement je ne suis pas très confiant quand je vois ton IsDir ...
    Plutôt que de parcourir la chaîne à la recherche d'un '.' qui pourrait être dans la nom du dossier on sait jamais pourquoi ne pas utiliser stat ?
    C'est plutôt puissant comme outil tu peux savoir tout ce qu'il y a à savoir sur la cible, savoir si c'est bien un fichier ou alors un dossier, si celui-ci est executable ou non et pas mal d'autres truc.
    Avec ça tu n'as plus qu'à rappeler ta fonction ouvrant ton dossier si tu en trouves un.

    http://www.linux-france.org/article/...n2/stat-2.html
    Man très moche mais un coup de firebug et le fond redevient blanc ^^

  4. #4
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Par défaut
    merci pour vos réponses,

    waether oui je sais que je peux le faire avec stat.h, mais je veux vraiment le faire avec '.' .

    pierrot106 effectivement strcpy fonctionnerais beaucoup mieux.

    sinon ce dont j'ai vraiment du mal à réaliser c 'est la récursivité qui me permettrait de lister le contenu, et ainsi d'afficher le chemin de tous les fichiers.
    je sais que la difficulté réside dans les niveaux des dossiers c'est à dire comment dois-je retenir les fichiers qui sont en même niveaux que les sous dossiers, est ce que je dois les enregistrer pour accéder dans les sous dossiers du même niveau ou dois-je rentrer dans le sous dossier avant de'enregistrer les fichiers, c'est la toute la difficulté du programme. Donc si vous pouvez me donner un coup de main la dessus , ca m'aiderai beaucoup.

    en vous remerciant.

  5. #5
    Membre actif Avatar de Waether
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 44
    Par défaut
    Ce qui me gène c'est que je ne vois pas vraiment ou tu veux arriver.
    Tu veux effectuer quelque chose comme la commande "tree" sous linux, afficher les path de tous les fichiers trouvés ainsi que les dossiers auquels ils appartiennent ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Par défaut
    oui c'est exactement ça que je veux réaliser.

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/05/2014, 14h58
  2. [FTP] Suppression de dossier récursive
    Par blastafarie dans le forum Langage
    Réponses: 6
    Dernier message: 20/11/2007, 09h05
  3. Lire un dossier .zip windows
    Par jessiem34 dans le forum Access
    Réponses: 5
    Dernier message: 16/07/2007, 22h32
  4. [Oracle 9i]Lire le dossier UNIX d'un directory Oracle
    Par BugFactory dans le forum Oracle
    Réponses: 2
    Dernier message: 03/03/2006, 17h46
  5. Lire un fichier situé dans 2 sous dossier...
    Par Pleymo dans le forum Langage
    Réponses: 10
    Dernier message: 08/12/2005, 09h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo