【发布时间】:2020-02-07 02:29:58
【问题描述】:
这里的总菜鸟,所以如果这在其他地方被覆盖,请提前道歉,但是,我在谷歌的任何地方或任何其他地方都找不到合适的例子。
我正在使用 std::filesystem::recursive_directory_iterator 遍历目录树。当我到达一个我没有权限的目录时,它会引发异常。我知道 std::filesystem::directory_options 是我想要的,能够跳过权限被拒绝而不遵循符号链接;但我不确定如何使用它。
基本上我需要遍历目录树(可能非常非常大);跳过任何权限被拒绝的目录并且不遵循符号链接。如果每个目录都有任何类型的文件,则该目录将被添加到队列中以供以后使用。
代码片段如下。
谢谢。
for (auto& dirent : std::filesystem::recursive_directory_iterator(start_path))
{
if (dirent.is_directory())
{
// CRASH if permission denied; need std::filesystem::options
std::filesystem::path fsp = dirent.path();
for (auto& subdirent : std::filesystem::directory_iterator(fsp))
{
if (!subdirent.is_directory())
{
dir_stack.push_back(dirent.path());
break;
}
}
}
}
【问题讨论】:
-
参见构造函数 (4): en.cppreference.com/w/cpp/filesystem/… 和你需要的掩码元素。
-
为什么要混合
recursive_directory_iterator和一个内部迭代器?看起来你可能会多次迭代同一个元素。
标签: c++ directory filesystems std options