閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

任意のディレクトリの下にあるファイルを再帰的に見に行く

昨日の、任意のディレクトリの下にあるファイルを再帰的に見に行く処理をC++でもやってみましょう。
Boost.Filesystemのboost::filesystem::recursive_directory_iteratorを使うと、再帰的に見てくれます。

#define BOOST_FILESYSTEM_VERSION 3
#include <boost/filesystem/operations.hpp>

int main()
{
  using namespace boost;
  using namespace boost::filesystem;

  recursive_directory_iterator iter = recursive_directory_iterator("C:\\hoge\\");
  recursive_directory_iterator end = recursive_directory_iterator();
  for (; iter != end; ++iter) {
    if (is_regular_file(*iter)) {
      std::cout << *iter << std::endl;
    }
  }
}

いずれRange版(directory_range)が用意されるようです
Rangeが使えると:

BOOST_FOREACH(directory_entry const& e, recursive_directory_range("C:\\hoge\\")) {
  if (is_regular_file(e)) {
     std::cout << e.path().string() << std::endl;
  }
}

こう書けるようになります。すっきり。

そのディレクトリの下にあるファイルだけでいいよ、再帰要らないよ、という場合はdirectory_iteratorが使えます。

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