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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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
    Membre averti
    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
    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 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 152
    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
    Membre averti
    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
    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 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 152
    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.

+ 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