【发布时间】:2013-08-29 15:20:06
【问题描述】:
为了熟悉<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 中运行了零次。为什么?
【问题讨论】:
-
您知道提案中的
recursive_directory_iterator并寻求重新实施吗?
标签: c++ visual-studio-2012 boost filesystems c++-tr2