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 :

détection des sous-dossiers


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut détection des sous-dossiers
    Bonjour, j'ai un problème tout simple :
    j'ai un dossier qui contient d'autres sous-dossier, des fichiers binaires (word par exemple), et des fichiers texte.

    J'ai déjà une fonction qui renvoie tous les sous-dossiers et fichiers d'un dossier donné

    Je voudrais me faire une fonction qui me renvoie tous les sous-dossiers.

    Je suis allé voir la page suivante :
    http://cpp.developpez.com/faq/cpp/?p...IERS_existence

    mais bien sûr, mon fichier word est détecté comme un dossier...


    Je suis ensuite allé sur :
    http://msdn.microsoft.com/en-us/libr...8vs.71%29.aspx

    mais je n'ai rien compris...

    Je travaille sous Visual C++ 2005 et sous Linux.

    Auriez-vous une idée ?

    Merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 50
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    Pour ma part, j'avais utilisé dans le passé la fonction "FindFirstFile" pour afficher les fichiers et répertoire d'un dossier bien précis. "FindFile" s'utilise apperement de la même manière.
    Tu peux appliquer un masque (*.*) dans "FindFile" pour que "FindFile" et "FindNextFile" te renvoient les bons fichiers (ou répertoires).
    Tu vas appeler "FindNextFile" en boucle jusqu'à ce qu'elle te renvoie 0, c'est à dire que le listing a pris fin, et effectuer des tests sur le type (fichier ou répertoire) de la lecture courante.

  3. #3
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    En combinant boost::filesystem::is_directory avec du Boost.Iterator, ça doit pouvoir s'écrire facilement
    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
    #include <algorithm>
    #include <iterator>
    #include <vector>
     
    #include <boost/filesystem.hpp>
    #include <boost/iterator/filter_iterator.hpp>
     
    namespace bfs = boost::filesystem;
     
    int main(int argc, char* argv[])
    {
       std::vector<bfs::path> v_subdirs;
       bfs::path const path = argv[1];
     
       std::copy(
          boost::make_filter_iterator<bool (*)( const bfs::path & ph )>(
                bfs::is_directory
                ,bfs::directory_iterator(path),bfs::directory_iterator()
            )
          ,boost::make_filter_iterator<bool (*)( const bfs::path & ph )>(
                bfs::is_directory
                ,bfs::directory_iterator(),bfs::directory_iterator()
            )
          ,std::back_inserter(v_subdirs)
       );
     
      return 0;
    }

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Tu peux ausi jeter un oeil à Yuni.

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Si tu arrives à énumérer tes fichiers, la fonction stat() est ce qu'il te 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    #include <sys/types.h>
    #include <sys/stat.h>
    #ifndef WIN32
    #  include <unistd.h>
    #endif
     
    namespace fsnode {
     
      inline bool is_file(const std::string& path)
      {
        struct stat buf;
        if (stat(path.c_str(), &buf) < 0) {
          // le fichier / répertoire n'existe pas
          return false;
        }
        return (bug.st_mode & _S_IFDIR) == 0;
      }
     
      inline bool is_dir(const std::string& path)
      {
        struct stat buf;
        if (stat(path.c_str(), &buf) < 0) {
          // le fichier / répertoire n'existe pas
          return false;
        }
        return (bug.st_mode & _S_IFDIR) != 0;
      }
     
      inline bool exists(const std::string& path)
      {
        struct stat buf;
        if (stat(path.c_str(), &buf) < 0) {
          // le fichier / répertoire n'existe pas
          return false;
        }
        return true;
      }
     
    }
    cf. http://msdn.microsoft.com/en-us/libr...v=VS.100).aspx pour Windows et http://www.linux-kheops.com/doc/man/...n2/stat.2.html pour linux.

Discussions similaires

  1. Parcourir noms des sous-dossiers
    Par Archalia dans le forum Langage
    Réponses: 1
    Dernier message: 13/11/2007, 17h58
  2. [batch] suppression des sous-dossiers
    Par mathieu_r dans le forum Windows
    Réponses: 1
    Dernier message: 12/03/2007, 20h53
  3. Réponses: 4
    Dernier message: 29/08/2006, 18h02
  4. Supprimer des sous-dossiers selon des critères
    Par Dertron dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 18/01/2006, 14h33
  5. Creation d'un dossier et des sous dossier
    Par fraizas dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 14/11/2005, 16h30

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