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 :

Besoin d'avis sur le code, "ls" maison, boost/stl


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Besoin d'avis sur le code, "ls" maison, boost/stl
    Salut à tous!
    J'essaye de me faire pleins de petits bouts de codes pour recréer un peu les commandes de bases servant à jouer avec les dossiers/fichiers. Je suis sous linux et je programme à l'aide de boost::filesystem v3 et de la stl (GNU).

    Comme la "commande" ls pourrait être utilisée, par exemple, récursivement dans tout plein de dossiers contenus dans un vector, je me suis dit qu'il serait bien d'en faire un foncteur. En gros, il faut que ce code soit simple, bullet proof et utilisable partout à toutes les sauces. Qu'en pensez-vous?
    Ps. Jsuis pas un professionnel

    Voici donc le code :
    ls.hpp
    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
     
    #pragma once
     
    #include <sstream>
    #include <memory>
    #include <algorithm>
    #include <iterator>
    #include <boost/filesystem.hpp>
     
    class ls
    {
        public:
     
        ls(const boost::filesystem::path &path = "."): path_(path){
        }
     
        //Envoye le chemin de tout ce qui se trouve à path_ sur un stream
        std::auto_ptr<std::istringstream> operator()() const{
            std::ostringstream oss; 
     
            //See boost tut3 for details in section tutorial of boost::filesystem
            //v3
            std::copy(boost::filesystem::directory_iterator(path_),
                    boost::filesystem::directory_iterator(), 
                    std::ostream_iterator<boost::filesystem::directory_entry>(oss,"\t") );
     
            return std::auto_ptr<std::istringstream>(new std::istringstream(oss.str()));
                    //then wtf about the streambuf?
        }
        private:
        const boost::filesystem::path path_;
    };
    main.cpp
    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
     
    #include <iostream>
    #include <boost/filesystem.hpp>
    #include "ls.hpp"
     
    using namespace std;
    using namespace boost::filesystem;
     
    int main(int argc, char *argv[])
    {
        path p;
        (argc == 1)?p = "." : p = argv[1];
        ls l(p);
     
        istream is(l()->rdbuf());
        string buf;
        while(!is.eof())
        {
            is >> buf;
            cout << buf << endl;
        }
     
     
        return 0;
    }
    Compilé avec g++ main.cpp -o ls -lboost_filesystem
    Tout marche bien du point de vue utilisateur.

  2. #2
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Je suis extrêmement dubitatif sur l’intérêt d’avoir en foncteur l’opération de conversion d’un directory_iterator vers une chaîne. Et même de l’intérêt de cette opération en général. D’autant que ça va consommer beaucoup de mémoire s’il y a beaucoup d’entrées dans le répertoire. Et je pense que ton code ne fonctionne pas s’il y a des espaces dans les noms de fichier.

    Je comprendrai mieux que, quitte à tout recopier, tu utilises un std::vector pour ensuite, trier par exemple.

Discussions similaires

  1. besoin d'un avis sur un code
    Par lazydev dans le forum Langage
    Réponses: 2
    Dernier message: 20/10/2010, 06h34
  2. Besoin d'avis sur un offre d'embauche en SSII
    Par Anne_so2121 dans le forum SSII
    Réponses: 14
    Dernier message: 25/07/2005, 13h09

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