J'ai donné un boost :: Système de fichiers :: chemin. Y a-t-il un moyen rapide d'obtenir le nombre de fichiers dans le répertoire pointé par le chemin? P>
3 Réponses :
directory_iterator begin(the_path), end; int n = count_if(begin, end, [](const directory_entry & d) { return !is_directory(d.path()); });
Cela comptera le nombre de tous les éléments, y compris des sous-répertoires, pas seulement des fichiers.
@Kirill: Cela n'aurait même pas fait cela avant que je le répète. :)
@Kirill: ça? Oui. Qu'est-ce que j'avais auparavant? Non.
Oh .. la page n'a pas rafraîchi :)
(pH = boost :: phénix) pH :: logical_not (pH :: lid (& is_directory, pH :: Bindry :: chemin, arg1))) code> doit le faire
Vous pouvez parcourir des fichiers dans un répertoire avec: ou récursivement: p> Vous pouvez trouver des exemples simples ici . p> p> p >
Voici une doublure en standard C ++:
#include <iostream> #include <boost/filesystem.hpp> #include <boost/lambda/bind.hpp> int main() { using namespace boost::filesystem; using namespace boost::lambda; path the_path( "/home/myhome" ); int cnt = std::count_if( directory_iterator(the_path), directory_iterator(), static_cast<bool(*)(const path&)>(is_regular_file) ); // a little explanation is required here, // we need to use static_cast to specify which version of // `is_regular_file` function we intend to use // and implicit conversion from `directory_entry` to the // `filesystem::path` will occur std::cout << cnt << std::endl; return 0; }
+1. Mais, pourquoi pas seulement utiliser int cnt = stdd :: comte_if (répertoire_iterator (the_path), répertoire_iterator (), static_cast
@xmllmx bonne note. Bien sûr, vous pouvez passer le répertoire code> sur la fonction autonome
is_regular_file code> fonction. Et l'appel de
annuaire_entry :: chemin () code> se produira implicitement. Je vais mettre à jour la réponse.
one-liner en standard c ++ ??? Ressemble à une doublure dans Boost qui n'est pas standard C ++.
@CRAIGB One-Line est STD :: comte_if. Boost a été utilisé ici uniquement parce que OP a posé des questions sur Boost :: FileSystem :: Path.
Avez-vous essayé l'exemple de didacticiel Simple_LS: Boost.org/ DOC / LIBS / 1_41_0 / LIBS / Système de fichiers / Exemple / Simple_Ls. CPP Comment ne répond pas à vos besoins?
Recursivement ou juste dans le répertoire d'un?
Avez-vous lu sur la répertoire itérateur? boost.org/doc/ LIBS / 1_36_0 / LIBS / Systèmes de fichiers / Doc / ...
Dupliqué possible de C ++ - Chargez tout le nom de fichier + Comptez le nombre de fichiers dans un répertoire actuel + une extension de fichier de filtre
@Gabe n'est pas récursivement, mais c'est aussi intereseting. @Krill j'ai cherché quelque chose de spécifique à booster mais n'a pas trouvé celui-ci. J'ai fait une recherche et tout!