可以使用这样的 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 ?
有一个 recursive_directory_iterator 的重载构造函数,带有 directory_options 枚举参数,其中有
skip_permission_denied
:
recursive_directory_iterator di(
"C:\\",
directory_options::skip_permission_denied,
ec);