Boost.Filesystem でディレクトリ内の全てのファイルを走査する
Boost.Filesystem の directory_iterator ではディレクトリ直下のファイルしか走査しませんが、recursive_directory_iterator を使用すれば全てのファイルを走査します。
[ソース]
#include <iostream> #include <boost/filesystem.hpp> #include <boost/range/algorithm/for_each.hpp> int main(){ namespace f = boost::filesystem; f::path target = "D:/boost/boost_1_49_0/boost/filesystem"; auto first = f::recursive_directory_iterator(target); auto last = f::recursive_directory_iterator(); boost::for_each(std::make_pair(first, last), [](f::path const& filepath){ std::cout << filepath << std::endl; }); return 0; }
[出力]
"D:/boost/boost_1_49_0/boost/filesystem\config.hpp" "D:/boost/boost_1_49_0/boost/filesystem\convenience.hpp" "D:/boost/boost_1_49_0/boost/filesystem\detail" "D:/boost/boost_1_49_0/boost/filesystem\detail\utf8_codecvt_facet.hpp" "D:/boost/boost_1_49_0/boost/filesystem\exception.hpp" "D:/boost/boost_1_49_0/boost/filesystem\fstream.hpp" "D:/boost/boost_1_49_0/boost/filesystem\operations.hpp" "D:/boost/boost_1_49_0/boost/filesystem\path.hpp" "D:/boost/boost_1_49_0/boost/filesystem\v2" "D:/boost/boost_1_49_0/boost/filesystem\v2\config.hpp" "D:/boost/boost_1_49_0/boost/filesystem\v2\convenience.hpp" "D:/boost/boost_1_49_0/boost/filesystem\v2\exception.hpp" "D:/boost/boost_1_49_0/boost/filesystem\v2\fstream.hpp" "D:/boost/boost_1_49_0/boost/filesystem\v2\operations.hpp" "D:/boost/boost_1_49_0/boost/filesystem\v2\path.hpp" "D:/boost/boost_1_49_0/boost/filesystem\v3" "D:/boost/boost_1_49_0/boost/filesystem\v3\config.hpp" "D:/boost/boost_1_49_0/boost/filesystem\v3\convenience.hpp" "D:/boost/boost_1_49_0/boost/filesystem\v3\exception.hpp" "D:/boost/boost_1_49_0/boost/filesystem\v3\fstream.hpp" "D:/boost/boost_1_49_0/boost/filesystem\v3\operations.hpp" "D:/boost/boost_1_49_0/boost/filesystem\v3\path.hpp" "D:/boost/boost_1_49_0/boost/filesystem\v3\path_traits.hpp"
今までゴリゴリと再帰処理していたけど、これで問題なさそうですね。
[boost]
- ver 1.49.0