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