directory_iterator 跳过无法访问的文件夹 Windows
directory_iterator skip over inaccessible files folders Windows
我正在尝试遍历 C:\
目录中的所有文件夹,并且仅在 C:\ 目录中。不在任何子文件夹中。我当前的问题是它在迭代时包含无法访问的文件和文件夹,如 swapfile.sys
或 System 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);
}
我正在尝试遍历 C:\
目录中的所有文件夹,并且仅在 C:\ 目录中。不在任何子文件夹中。我当前的问题是它在迭代时包含无法访问的文件和文件夹,如 swapfile.sys
或 System 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);
}