c++ 文件系统::递归目录迭代器异常

zpqajqem  于 2023-02-10  发布在  其他
关注(0)|答案(2)|浏览(235)

以下功能:

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时也会发生同样的行为。为什么它会在那个特定的文件夹上引发异常呢?

atmip9wb

atmip9wb1#

显然,当操作系统拒绝访问其中一个文件夹的权限时会引发异常。
解决方法是使用适当的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';
}
t30tvxxf

t30tvxxf2#

我刚刚在Windows 10上的文件夹条目上收到此错误。
该条目已损坏,根本无法在Windows中读取或删除该文件夹。不过,我可以重命名该文件夹,但最后我不得不擦除硬盘,因为即使是Windows(或任何命令/修复工具)也无法修复这个问题。
所以在我的情况下,我会说这是一个适当的例外(正如预期的那样)。

相关问题