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 :

Liste des fichiers *.txt


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 45
    Par défaut Liste des fichiers *.txt
    Bonjour,

    Je souhaiterais récupérer, dans un tableau, la liste de tous les fichiers *.txt présents dans un répertoire de Windows, pour pouvoir les ouvrir un par un et leur appliquer un traitement.

    Comment dois-je m'y prendre ?

    Merci.

    Tapiou.

  2. #2
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Par défaut
    Boost.Filesystem serait tout indiqué dans cette situation.

    Voici, pour exemple, un code qui affiche tout les fichiers présents dans un répertoire.
    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
    #include <boost/filesystem.hpp>
    #include <iostream>
     
    int main(int argc, char* argv[]) {
        if(argc == 2) {
            boost::filesystem::path directory(argv[1]);
     
            if(boost::filesystem::exists(directory) && boost::filesystem::is_directory(directory)) {
                boost::filesystem::directory_iterator begin(directory);
                boost::filesystem::directory_iterator end;
     
                while(begin != end) {
                    std::cout << *begin << " ";
                    ++begin;
                }   
                std::cout << "\n";
            }   
        }

  3. #3
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 45
    Par défaut
    Merci pour la réponse mais sans utiliser boost, est-ce que c'est possible ?

    Tapiou.

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    Il est quand même ahurissant qu'une librairie <filesystem> ne soit toujours pas présente dans C++11...

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Par défaut
    Citation Envoyé par cob59 Voir le message
    Il est quand même ahurissant qu'une librairie <filesystem> ne soit toujours pas présente dans C++11...
    Je suis parfaitement d'accord. J'attend avec impatience qu'un nouveau technical report (TR2?) soit publier et vienne combler les lacunes de la bibliothèque standard. Il ne manque pas qu'une bibliothèque de gestion des systèmes de fichier, il est grand temps d'avoir une bibliothèque complète de gestion du temps et des dates (basé sur std::chrono?), un système de signal/slot et peut-être même une bibliothèque de communication par socket (je sais, je pousse un peut le bouchon...).

    Personnellement, je crois que C++11 est venu apporter énormément au langage mais que, à présent, il est temps de se consacrer à la bibliothèque standard.

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    @cob59: La quasi-totalité du TR2 n'est pas inclue au C++11, ca sera plus probablement pour la prochaine version de la norme, dans pas trop longtemps (comparé au temps séparant les deux normes précédentes).

  7. #7
    Membre averti
    Inscrit en
    Octobre 2011
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 45
    Par défaut
    Et pour mon problème initial :

    Je souhaiterais récupérer, dans un tableau, la liste de tous les fichiers *.txt présents dans un répertoire de Windows, pour pouvoir les ouvrir un par un et leur appliquer un traitement. Sans utiliser boost.


    Est-ce quelqu'un pourrait m'aider ?

    Merci.

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    FindFirstFile et ses copains sont tes amis (F.A.Q Win 32 : Comment lister le contenu d'un dossier ?)

    :
    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
    #include <windows.h>
    #include <iostream>
    #include <string>
     
     
    template<class op_t>
    void process_files(std::wstring path_, op_t op)
    {
        HANDLE hdl;
        WIN32_FIND_DATA fd_data;
     
        hdl = FindFirstFile(path_.c_str(), &fd_data);
     
        if (hdl != INVALID_HANDLE_VALUE)
        {
            do
            {
                op(fd_data.cFileName);
            }while (FindNextFile(hdl, &fd_data));
     
            FindClose(hdl);
        }
    }
     
    struct print_file
    {
       void operator()(std::wstring file_name_)
       {
          std::wcout<<file_name_<<"\n";
       }
    };
     
    int main()
    {
        process_files(L"C:\\some\\dir\\*.txt",print_file());
        return 0;
    }

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Citation Envoyé par cob59 Voir le message
    Il est quand même ahurissant qu'une librairie <filesystem> ne soit toujours pas présente dans C++11...
    Je crois que c'est une volonté du comité, qui ne veut absolument pas que la norme soit liée à une quelconque plate-forme.
    Or, à partir du moment où tu introduit l'équivalent d'une bibliothèque FileSystem, tu dois dire avec quels OS ça doit fonctionner...

  10. #10
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par oodini Voir le message
    Je crois que c'est une volonté du comité, qui ne veut absolument pas que la norme soit liée à une quelconque plate-forme.
    Or, à partir du moment où tu introduit l'équivalent d'une bibliothèque FileSystem, tu dois dire avec quels OS ça doit fonctionner...
    Pas forcément...

    Tu peux parfaitement fournir des règles dont l'implémentation sera effectivement du système ou de l'implémentation

    Regarde, simplement, l'implémentation des flux d'entrée / sortie standard, des tailles des types primitifs ou des allocateurs : il y a déjà une grande partie de l'implémentation qui est système dépendante car la "sortie standard", la taille des primitifs ou la gestion de mémoire se fait de manière fort différente (un simple exemple : la console nux et la console windows n'utilisent déjà pas le meme standard!!! Sans parler de tous ces systèmes qui n'utilisent pas une console, mais... autre chose )

    Il n'empêche que, cout est défini par la norme comme étant le périphérique de sortie standard, et que tout fonctionne de manière parfaitement standard

    La norme pourrait parfaitement définir l'ensemble des comportements dont, au final, seul celui correspondant à la récupération de la chaine de caractères représentant le chemin d'accès (et le nom du fichier) serait système dépendant!!!

    Je présumes que c'est uniquement par manque de temps et parce que l'on parlait déjà de la "nouvelle norme" depuis trop longtemps (il aura vraiment fallu très longtemps pour qu'elle sorte: on en parle déjà depuis plus de cinq ans !!! ) qu'ils ont préféré supprimer certaines parties, dont <filesystem>.

    Si tu remontes aux messages qui datent de deux ou trois ans dans ce forum, tu constateras, par exemple, que c'est le sort qu'ont subit plusieurs nouvelles fonctionnalités, telles que les concepts, par exemple

    Cela ne veut absolument pas dire que ce soit définitivement abandonné, cela veut simplement dire que c'est reporté "sine die" (en gros, jusqu'à la prochaine refonte, qu'elle prenne la forme d'un technical report, ou celle de la prochaine révision en profondeur )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  11. #11
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    D'une certaine façon, les flux sont des concepts plus hauts qu'un système de fichier. Je peut avoir des flux sur un système embarqué (par exemple pour les périphériques d'E/S) sans pour autant avoir de notion de fichiers.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/07/2011, 15h38
  2. [Delphi 2005] Comment parcourir la liste des fichiers ?
    Par babyface dans le forum Langage
    Réponses: 2
    Dernier message: 30/06/2005, 11h01
  3. Réponses: 7
    Dernier message: 19/09/2004, 22h01
  4. liste des fichiers d'un répertoire
    Par am dans le forum C
    Réponses: 3
    Dernier message: 04/08/2003, 17h03
  5. [Kylix] Liste des fichiers d'un répertoire
    Par Houben Jacques dans le forum EDI
    Réponses: 3
    Dernier message: 30/11/2002, 21h14

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