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 :

Problème pour lister les fichiers d'un dossier


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Problème pour lister les fichiers d'un dossier
    Salut à tous, c'est ma 1e publication ici, donc si il y a un soucis au niveau de la compréhension, n'hésitez pas à me le dire.
    Voila j'ai un petit projet à faire, qui doit compter le nombre de lignes dans chaque fichier dans un dossier.
    J'en suis qu'au début actuellement: je veux juste afficher les fichiers et dossiers dans le chemin que rentre l'utilisateur.

    Seulement, quand j'exécute mon code, lorsque je met un chemin valide dans le programme (ex: "/users/user/desktop/test" ) il ne me sort rien du tout. J'ai préalablement créée un dossier "test" sur le bureau pour l'occasion avec un fichier .cpp

    Voila mon code:
    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
    int main(int ac, const char * av[])
    {
     
        string i;
        DIR* rep = NULL;
        struct dirent* ent = NULL;
     
        if (ac == 1)
        {
     
            cout << "Welcome in SupCount\n";
            cout << "Enter folder location: ";
     
            getline(cin,i);
            rep = opendir(i.c_str());
     
            if (rep == NULL || closedir(rep) == -1)
            {
                cout << "Erreur, le dossier n'a pas pu être ouvert ou le dossier n'a pas été correctement fermé.\n";
                exit(EXIT_FAILURE);
            }
     
            //Lister les fichiers et dossiers dans le dossier
     
            while ((ent = readdir (rep)))
            {
                if (ent == NULL)
                {
                    cout << "Erreur, le dossier est vide \n";
                    exit(3);
                }
     
                cout << ent->d_name;
            }
     
            //Lecture des fichiers dans le dossier
     
     
        }
     
    }
    Quelqu'un peut m'aider s'il vous plait? Ca fait 3j que je comprends pas pourquoi rien ne sort, je suis à bout.

    Merci !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir

    Je n'ai pas la réponse à ta question mais je pense que tu te simplifierais la vie en utilisant boost filesystem : http://www.boost.org/doc/libs/1_60_0...tory-iteration

    ou sinon sous linux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <cstdlib>
    #include <iostream>
    #include <string>
    using namespace std;
    int main () {
        cout << "nom du dossier ? " << endl;
        string d;
        cin >> d;
        string cmd = "find " + d + " -type f | xargs wc -l";
        system(cmd.c_str());
        return 0;
    }
    Dernière modification par Invité ; 22/02/2016 à 21h13.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Bonsoir, merci pour votre réponse.

    Je vais voir sur le lien que vous m'avez donné, j'ai essayé de comprendre le code et c'est vrai que ça a l'air beaucoup plus simple, j'ai juste pas encore compris à quoi sert le try/catch, mais je vais approfondir la chose.

    Merci encore

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,
    ton code ne sort rien du tout ou tu tombes dans un de tes cas d'erreur ? (genre Erreur, le dossier n'a pas pu être ouvert ou le dossier n'a pas été correctement fermé.)
    Le code n'a pas l'air mauvais en regardant rapidement. As-tu essayé le debugger ? As-tu vérifié les permissions ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Salut,
    Quand je veux accéder à un dossier inexistant, il me sort bien l'erreur "Erreur, le dossier n'a pas pu être ouvert ou le dossier n'a pas été correctement fermé", mais quand je tente d'accéder à un dossier qui existe (exemple "/users/user/desktop"), il ne me sort rien.

    J'ai bien essayé de débug en affichant "1" avant la boucle, et en fait il m'affiche bien le 1, mais ne rentre pas dans la boucle, je ne sais pas pourquoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    cout << "1";
    while ((ent = readdir (rep)))
            {
                if (ent == NULL)
                {
                    cout << "Erreur, le dossier est vide \n";
                    exit(3);
                }
     
                cout << ent->d_name;
            }

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    S'il n'affiche rien c'est au choix
    - ton dossier est vide
    - t'as pas le droit de le lire
    - t'as pas le droit de lire les éléments qui s'y trouve

    Btw, tonif (ent == NULL) ne sert à rien, si ent est null tu sors de la boucle.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Alors c'est vraiment bizarre parce que j'ai fait un chmod -R 777 sur le dossier que je veux lire, et le fichier dedans a tous les droits, et je n'arrive toujours pas à afficher quelque chose..
    Je suis à bout, je sais plus quoi faire

  8. #8
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    et si tu ajoutes un endl ou un flush après ton affichage.

    essaie avec cout << "candidat: '" <<ent->d_name << '\'' << std::endl;
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Salut,
    Toujours pareil, rien ne change. Quand je me sers du terminal de Xcode, il y a juste
    Program ended with exit code: 0

  10. #10
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Et si tu lances ton programme manuellement, depuis un terminal, que se passes-t-il?

    Je dirai que c'est parce qu'xcode ne lance pas ton programme depuis le dossier que tu crois.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Il ne fait rien, le prompt apparait juste

  12. #12
    Invité
    Invité(e)
    Par défaut
    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
    #include <dirent.h>
    #include <iostream>
    using namespace std;
    int main(){
        string path;
        cout << "Enter folder location: ";
        getline(cin, path);
        DIR* rep = opendir(path.c_str());
        if (not rep)    {
            cout << "Erreur, le dossier n'a pas pu être ouvert." << endl;
            exit(EXIT_FAILURE);
        }
        while (true) {
            struct dirent* ent = readdir (rep);
            if (not ent) break;
            cout << ent->d_name << endl;
        }
        return 0;
    }

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Merci, mais tu peux m'expliquer la différence avec mon code?

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    En regardant d'un peu plus près... if (rep == NULL || closedir(rep) == -1) est-ce que fermer le dossier c'est le meilleur moyen de lire son contenu tu penses ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Bousk Voir le message
    En regardant d'un peu plus près... if (rep == NULL || closedir(rep) == -1) est-ce que fermer le dossier c'est le meilleur moyen de lire son contenu tu penses ?
    YES ! Merci j'ai enlevé || closedir(rep) == -1 et c'est bon ça marche !

    Merci beaucoup !

  16. #16
    Invité
    Invité(e)
    Par défaut
    Sympa ce forum : je passe du temps à corriger un code et je me prends un -1 parce qu'il aurait fallu que je poste aussi le diff ?
    Je ne poste pas pour la gloire mais là je ne suis pas prêt de refiler un coup de main de sitôt.

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par groharpon42 Voir le message
    Sympa ce forum : je passe du temps à corriger un code et je me prends un -1 parce qu'il aurait fallu que je poste aussi le diff ?
    Je ne poste pas pour la gloire mais là je ne suis pas prêt de refiler un coup de main de sitôt.
    Merci à toi aussi, mais le truc c'est que tu me donne du code comme ça, sans même l'expliquer..
    Je suis un débutant en C++, donc peut être que ton code est clair pour toi, mais pour moi il faut un minimum d'explication.
    Mais c'est gentil de ta part de m'avoir aidé, je t'en suis reconnaissant.

  18. #18
    Invité
    Invité(e)
    Par défaut
    Pas de soucis, je pensais que le code suffisait mais j'aurais complété volontiers si quelqu'un ne l'avait pas déjà fait.
    Par contre, ce système de +1/-1 anonyme pire qu'en 40, ça commence vraiment à me sortir par les trous de nez...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Free Pascal] Problème pour lister les fichiers d'un serveur distant
    Par mm_71 dans le forum Free Pascal
    Réponses: 6
    Dernier message: 26/06/2013, 09h52
  2. Problème pour trier les fichiers d'un dossier par date
    Par Stephane_br dans le forum VB.NET
    Réponses: 7
    Dernier message: 24/07/2012, 16h34
  3. Problème pour lister les fichiers d'in JAR
    Par Micke7 dans le forum Langage
    Réponses: 4
    Dernier message: 25/02/2011, 11h21
  4. Réponses: 1
    Dernier message: 25/02/2009, 09h44
  5. Problème pour lister les fichiers d'un répertoire
    Par Vitaly dans le forum Applets
    Réponses: 17
    Dernier message: 21/08/2007, 00h49

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