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

Linux Discussion :

Parcourire un répertoir en [C++]


Sujet :

Linux

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Points : 149
    Points
    149
    Par défaut Parcourire un répertoir en [C++]
    hello

    Je cherche a parcourir les répertoires et sous répertoire, comme je débute en C++ donc je découvre aussi les fonctions spécifiques a Linux (donc, c'est pour Linux seulement), je ne s’ai pas si une api permet de le faire directement.
    ce que je cherche à faire :

    Lister les répertoires et sous répertoire y compris tout les fichiers avec tout leur attribut (groupe, nom utilisateur, date, etc. je pense utiliser stat , plus tard).

    Problème rencontrer : nombreux code trouver le font mai ne gère pas les répertoires monter à distance avec mount (donc déjà monter, ou via le fstab déjà monter, réseau samba principalement) sa déconne ou ça plante
    plutôt que de donner les codes qui ne marchent pas qui ne sont pas le mien, je donne ici celui que j'essaye de développer.
    j'essaye donc de le faire moi-même, ce qui est loin d'être simple avec la récursivité bref.

    Le code suivant semble bien les lister. Mai ne remonte pas dans le répertoire d'origine, après avoir listé la première branche ??
    je loupe quelque chose mai je tourne en rond ... et le code aussi
    Merci d'avance


    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
     
    #include <iostream>
    #include <vector>
    #include <string>
    #include <dirent.h>
    #include <sys/stat.h>
    using std::string;
     
    /*
     _______________________________
    /______________________________/|
    ||  Coder par panthere noire   ||
    ||      liscence GPL v3        ||
    |/_____________________________|/
     
    Ce code est destiner a lister le plus rapidement possible.
    Les fichier et les répertoire sous linux.
    Avec leur atribbus aux complet.
     
    */
     
    void Full_Search(std::vector<string> &search_full_path, 
    std::vector<string> &search_rep_name, 
    std::vector<string> &search_file_name, 
    std::vector<string> &stat_info,long &number_element);                     //Prototype Full_Search 
     
    void Full_Search(std::vector<string> &search_full_path,
    std::vector<string> &search_rep_name, 
    std::vector<string> &search_file_name, 
    std::vector<string> &stat_info, long &number_element)
    { 
        if (search_full_path[ number_element ] != "")
        {
            int cmb = search_full_path[ number_element ].length();
            if (search_full_path[ number_element ].substr((cmb- 1), cmb) != "/")
            { 
                search_full_path[ number_element ] += "/";
            }
    /*        if (search_full_path[ number_element ] != search_full_path[ 0 ])
            {
                search_full_path[ number_element ] = search_full_path[ 0 ] += search_full_path[ number_element ];
            }
    */
            DIR *InitialRep = opendir(search_full_path[ number_element ].c_str());
            if (InitialRep != NULL)
            {
                //std::cout << search_full_path[ number_element ] << std::endl;
                struct dirent *SRep;
                while ((SRep = readdir(InitialRep)) != NULL)                                //tant que le répertoire contient des fichiers
                {
                    string FileFound = SRep->d_name;                                        //definir le chemin d'acces complet
                    string PathFound = search_full_path[ number_element ] + FileFound;      // chemin complet
                    std::cout << "DEBUG 1: " << FileFound << std::endl;
                    if (FileFound != "." && FileFound != "..") 
                    {
     
                        search_full_path[ 0 ] = PathFound + "/";                            //Le bug ce situe peut être ici
                        std::cout << "DEBUG 8: " << search_full_path[ number_element ] << "nombre d'élément " << number_element << std::endl;
                        if (opendir(PathFound.c_str()) != NULL)
                        {
                            std::cout << "DEBUG 1: " << FileFound << std::endl;            //affichage 
                            //search_full_path.push_back(FileFound);                       
                            search_full_path.push_back(search_full_path[ number_element ]);// ajout des nouvelle entrée
                            ++number_element;
                            std::cout << "nombre d'élément " << number_element << std::endl;
                            Full_Search(search_full_path, search_rep_name, 
                            search_file_name, stat_info,number_element);                    //apelle recusif pour les sous répertoires bug ?
                        }
                    }
                } //while
            }
            closedir(InitialRep);                                                           //fermer le repertoire courant
        }
    }                                                                                       //function Full_Search
     
    int main()
    {
                                                                                            //variable
    std::vector<std::string> search_full_path;                                              // chemin complet,note il serait probablement utile de fournire plusieur chemin a la fois.
    std::vector<std::string> search_rep_name;                                               // repertoir seulement
    std::vector<std::string> search_file_name;                                              // fichier seulement
    std::vector<std::string> stat_info;                                                     // information global sur le répertoir ou le dossier
    long number_element;
                                                                                            //code
    search_full_path.push_back("/home");
    number_element=0;
    Full_Search(search_full_path, search_rep_name, search_file_name, stat_info,number_element);
    //std::cout << search_full_path[ 1 ]<< std::endl;
    std::cout << "nombre d'élément " << number_element << std::endl;
    return 0;
    }                                                                                       // main

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par panthere noire Voir le message
    Problème rencontrer : nombreux code trouver le font mai ne gère pas les répertoires monter à distance avec mount (donc déjà monter, ou via le fstab déjà monter, réseau samba principalement) sa déconne ou ça plante
    Incompréhensible. Une fois qu'un répertoire est monté (NFS ou Samba), il est vu comme faisant partie de l'arborescence donc les fonctions comme opendir() et readdir() ne devraient pas avoir de problème !!!

    Citation Envoyé par panthere noire Voir le message
    j'essaye donc de le faire moi-même, ce qui est loin d'être simple avec la récursivité bref.
    Ben justement si c'est hyper simple avec la récursivité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    fonction(dossier)
    {
        pour chaque fichier du dossier passé en argument
        faire
             si fichier est "." ou ".." => passe
             afficher fichier
             si fichier est répertoire et n'est pas lien symbolique (hyper dangereux)
             alors
                   créer nom contenant dossier + "/" + fichier
                   fonction(nom)
            fin si
       fin faire
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Incompréhensible. Une fois qu'un répertoire est monté (NFS ou Samba), il est vu comme faisant partie de l'arborescence donc les fonctions comme opendir() et readdir() ne devraient pas avoir de problème !!!
    Pour ce qui est de mon code je ne sais pas car j'ai pas un code fonctionnel, pour ce que j'ai trouver cela marche , mai assez mal.


    Ben justement si c'est hyper simple avec la récursivité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    fonction(dossier)
    {
        pour chaque fichier du dossier passé en argument
        faire
             si fichier est "." ou ".." => passe
             afficher fichier
             si fichier est répertoire et n'est pas lien symbolique (hyper dangereux)
             alors
                   créer nom contenant dossier + "/" + fichier
                   fonction(nom)
            fin si
       fin faire
    }

    C'est ce que je fais avec mon code seulement je ne vois pas ou ça coince ?

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par panthere noire Voir le message
    C'est ce que je fais avec mon code seulement je ne vois pas ou ça coince ?
    Malheureusement je suis une bille en C++ donc je peux pas t'aider. Mais imagine par exemple que le nom ne soit pas réinitialisé à chaque fichier lu ou un truc de ce style...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Malheureusement je suis une bille en C++ donc je peux pas t'aider. Mais imagine par exemple que le nom ne soit pas réinitialisé à chaque fichier lu ou un truc de ce style...
    merci pour ta réponse, oui je debg sans problème m'enfin la je voit pas ou sa va pas

Discussions similaires

  1. Macro " parcourir un répertoire"
    Par ilada dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/05/2007, 21h32
  2. [VB6]parcourir un répertoire sur un site ftp
    Par mcay dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 02/05/2007, 04h41
  3. Fenêtre Parcourir pour répertoire
    Par nawax88 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 16/04/2007, 13h37
  4. Parcourir un répertoire et stocker son chemin complet
    Par Paloma dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/10/2006, 12h29
  5. Parcourir un répertoire et récupérer tous les fichiers
    Par Sniper94-2 dans le forum Windows
    Réponses: 6
    Dernier message: 08/09/2005, 01h23

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