find_file_rangeはWindows限定だし今ならBoost.Filesystemを使った方が良さそう、ということで試してみる。
#include <algorithm> #include <iostream> #define BOOST_FILESYSTEM_VERSION 3 #include <boost/filesystem.hpp> int main() { using namespace boost::filesystem; std::copy(directory_iterator(path("C:/home/")), directory_iterator(), std::ostream_iterator<directory_entry>(std::cout, "\n")); }
Tutorialから持ってきただけですが、RangeがないっぽいのでRange Adaptorを使いたいならPStade.Ovenを使うか、自分で作らないといけないようです。
boost::copy(boost::make_iterator_range(directory_iterator(path("C:/home/")), directory_iterator()) | filtered(bll::bind<bool(path const&)>(is_regular_file, bll::_1)) | filtered(bll::bind(file_size, bll::_1) > 1000), std::ostream_iterator<directory_entry>(std::cout, "\n"));
ファイルサイズの取得などはWindows API使うよりずっと楽で便利。Filesystemはビルドが必要なのが少し面倒ですが。