Intereting Posts
функция, которая принимает только целые литералы Почему std :: bind может быть назначен аргумент-несогласованный std :: function? Специализируйте множество шаблонов для набора типов Хранение и извлечение нескольких ключей в C ++ Могу ли я писать приложения Cocoa Touch на языке C ++? Обнаруживать, когда требуется прокрутка, когда пользователь перетаскивает элементы списка В чем основное отличие между stdlib.h и cstdlib в C ++? Разница между точками последовательности и приоритетом оператора? 0_о ошибка LNK2005: _DllMain @ 12, уже определенная в MSVCRT.lib Борьба с синтаксисом alignas Использовать временный аргумент по умолчанию в конструкторе Qt-сигналы и слоты: разрешения Невозможно определить оператор ++ в C ++, в чем проблема? Тестирование с помощью GTest и GMock: общие или статические библиотеки Отладка C ++ Visual Studio – точка наблюдения за изменением размера вектора

Как подсчитать количество файлов в каталоге с помощью boost :: filesystem?

Мне дается boost :: filesystem :: path. Есть ли быстрый способ получить количество файлов в каталоге, на который указывает путь?

Вот однострочный шрифт в стандартном C ++:

#include  #include  #include  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(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; } 

Вы можете перебирать файлы в каталоге с помощью:

 for(directory_iterator it(YourPath); it != directory_iterator(); ++it) { // increment variable here } 

Или рекурсивно:

 for(recursive_directory_iterator it(YourPath); it != recursive_directory_iterator(); ++it) { // increment variable here } 

Здесь вы можете найти несколько простых примеров.

 directory_iterator begin(the_path), end; int n = count_if(begin, end, [](const directory_entry & d) { return !is_directory(d.path()); });