ディレクトリ内のファイル一覧を取得する(Boost.Filesystem)

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はビルドが必要なのが少し面倒ですが。