std::文件系统::recursive_directory_iterator 具有一致的路径分隔?



我刚刚注意到std::filesystem::recursive_directory_iterator使用不同的路径分隔符(即/vs) 取决于它是在 Windows 还是 Linux 上,有没有办法让它返回带有'/'的路径,使其在系统之间保持一致?

这就是我获取路径的方式:

for(auto& path: fs::recursive_directory_iterator(dir_path))
{
// Skip directories in the enumeration.
if(fs::is_directory(path)) continue;
string path_str = path.path().string();
}

我的意思是,两个操作系统之间的path_str内容会有所不同(因为分隔符会不同),我希望它们是相同的。我可以在最后一个字符串上替换它们,但这比我可以指示 stl 使用"/"表示所有内容相比,这需要更多的循环。

因此,您的问题与recursive_directory_iterator无关, 迭代directory_entry对象,而不是路径。您的困惑可能源于这样一个事实,即目录条目可以隐式转换为路径,因此您可以这样使用它们。

您的问题实际上是关于path::string(),正如文档所述,它使用本机格式(即使用平台相关分隔符)。无论你如何走路,你都会遇到同样的问题。

如果要获取/作为目录分隔符,请改用path::generic_string()获取通用格式的路径。

for(auto& dir_entry: fs::recursive_directory_iterator(dir_path))
{
if(dir_entry.is_directory()) continue;
string path_str = dir_entry.path().generic_string();
}

最新更新