directory_iterator 跳过无法访问的文件夹 Windows

directory_iterator skip over inaccessible files folders Windows

我正在尝试遍历 C:\ 目录中的所有文件夹,并且仅在 C:\ 目录中。不在任何子文件夹中。我当前的问题是它在迭代时包含无法访问的文件和文件夹,如 swapfile.sysSystem Volume Information。我如何检查标志或诸如此类的东西以排除此类对象?

for (const auto& entry : std::filesystem::directory_iterator(dir))    
{
    
    // Have the if() check here to see if it's accessible
        directory.emplace_back(f);
}

您可以使用 fs::status(entry).permissions() to get the permissions of the current entry and choose whether to skip it according to its flag value.

for (const auto& entry : fs::directory_iterator(dir)) {
  auto p = fs::status(entry).permissions();
  if ((p & fs::perms::owner_read) != fs::perms::none)
    directory.emplace_back(f);
}

如果由于尝试访问不可访问的项目而导致迭代失败,您可以在迭代器的构造函数中指定 skip_permission_denied 标志,例如:

for (const auto& entry : std::filesystem::directory_iterator(dir, std::filesystem::directory_options::skip_permission_denied))    
{
    directory.emplace_back(f);
}