0

我想检索 C:/ 驱动器中的所有文件/目录路径(嵌套),至少如果它们当前未使用或我有权检索的地方。

为了递归地做到这一点,我使用 recursive_directory_iterator 了 from std::filesystem

由于以下原因,我设法避免了权限错误std::filesystem::directory_options::skip_permission_denied

但是,当我的程序进入C:/drivers时,我得到_Error _Sharing_violation (32) __std_win_error了因为它试图访问的文件可能是打开的。

我添加了避免C:/WindowsC:/drivers的条件,但我想确保避免前面提到的错误。不幸的是,文件系统中没有选项可以防止此错误,例如skip_permission_denied权限,或者我不知道。

这是我当前的代码:

fs::path rootPath = "C:";
fs::path exclPath = rootPath / "\\Windows";
fs::path drivrPath = rootPath / "\\drivers";

const std::filesystem::directory_options options = (std::filesystem::directory_options::skip_permission_denied);

for (fs::directory_entry p : std::filesystem::recursive_directory_iterator("C:\\", options))
        {
          string filePath = p.path().string();
          // Vérification du type de l'objet
                        
          if (!fs::is_regular_file(p.path()) && filePath.find(drivrPath.string()) == string::npos && filePath.find(exclPath.string()) == string::npos)
                        {


                            cout << filePath << endl;


                        }

        }

不注意!fs::is_regular_file(p.path()),我手动更改它以测试和检索目录或文件。我得到两者的共享冲突错误

经过一些测试后,我发现我的程序在检查C:\DumpStack.log.tmp时失败了。问题来自!fs::is_regular_file(p.path()). 当我删除此验证时,该程序起作用了。现在,我不知道如何在不触发共享冲突的情况下检查对象类型

4

0 回答 0