std :: filesystem :: recursive_directory_iterator异常

时间:2018-09-13 16:44:03

标签: c++ windows-10 c++17

以下功能:

void foo(const std::string& dir)
{
    for (auto& el : std::filesystem::recursive_directory_iterator(dir)) {
            std::cout << el.path() << '\n';
    }
}

用于:

int main()
{
    std::string p = "C:\\";
    foo(p);
}

在Windows 10上到达某个文件夹(我假设)时引发异常。该代码在VS 2017上带有C ++ 17支持进行编译。 异常消息是:

recursive_directory_iterator::operator++: The system cannot find the path specified.

当也使用std::filesystem::directory_iterator时,也会发生相同的行为。 为什么在该特定文件夹上引发异常?

1 个答案:

答案 0 :(得分:0)

显然,当操作系统拒绝访问其中一个文件夹的权限时,会引发异常。

解决方法是利用适当的recursive directory iterator构造函数重载(第4个)并提供skip_permission_denied参数:

for (auto& el : std::filesystem::recursive_directory_iterator(dir, std::filesystem::directory_options::skip_permission_denied)) {
    std::cout << el.path() << '\n';
}