是否可以使用 recursive_directory 迭代器跳过 EPERM?

问题描述 投票:0回答:1

可以使用这样的 recursive_directory_iterator 跳过不可读的目录:

#include <iostream>
#include <filesystem>

using namespace std;
using namespace filesystem;

int main()
{
    error_code ec;
    recursive_directory_iterator di( "C:\\", ec );
    for( ; di != recursive_directory_iterator(); di.increment( ec ) )
    {
        if( ec.value() )
        {
            ec = error_code();
            continue;
        }
        cout << di->path() << endl;
    }
}

这将停止并出现类似于 Windows 的 EPERM(错误代码 5)。有没有办法避免使用部分可读的树,同时坚持使用 recursive_directory_iterator ?

c++ c++17 filesystems
1个回答
0
投票

有一个 recursive_directory_iterator 的重载构造函数,带有 directory_options 枚举参数,其中有

skip_permission_denied
:

recursive_directory_iterator di(
        "C:\\",
        directory_options::skip_permission_denied,
        ec);
© www.soinside.com 2019 - 2024. All rights reserved.