に慣れるために<filesystem>
、ディレクトリ ツリーをたどる単純な再帰関数を作成しました。
#include <filesystem>
namespace fs = std::tr2::sys;
const fs::directory_iterator fs_end;
void walk(fs::path root)
{
std::cout << "ENTERING " << root << '\n';
for (auto it = fs::directory_iterator(root); it != fs_end; ++it)
{
if (is_directory(it->status()))
{
walk(it->path());
}
else
{
std::cout << it->path() << " is not a directory\n";
}
}
std::cout << "LEAVING " << root << '\n';
}
int main()
{
walk("d:/a");
}
残念ながら、これは で指定されたディレクトリ内の直接のディレクトリにしかアクセスしませんmain
。サブディレクトリはアクセスされません。説明のために、非常に単純なディレクトリ構造を作成しました。
プログラムの出力は次のとおりです。
ENTERING d:/a
ENTERING b
LEAVING b
ENTERING c
LEAVING c
LEAVING d:/a
ご覧のとおり、d はアクセスされていません。明らかに、for ループは c 内で 0 回実行されます。なんで?