获取递归迭代的目录相对于指定入口路径的路径
Getting the path of recursively iterated directories relative to the specified entry path
考虑 std::filesystem::recursive_directory_iterator
的 the documentation 中的示例:
#include <fstream>
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
fs::current_path(fs::temp_directory_path());
fs::create_directories("sandbox/a/b");
std::ofstream("sandbox/file1.txt");
fs::create_symlink("a", "sandbox/syma");
for(auto& p: fs::recursive_directory_iterator("sandbox"))
std::cout << p.path() << '\n';
fs::remove_all("sandbox");
}
Possible output:
"sandbox/a"
"sandbox/a/b"
"sandbox/file1.txt"
"sandbox/syma"
我想从输出中删除在构造 recursive_directory_iterator
时指定的 sandbox/
前缀,例如:
"a"
"a/b"
"file1.txt"
"syma"
我浏览了文档,但找不到任何相关内容。
做一点字符串处理没什么大不了的,但我不喜欢引入稍微低级的代码,从路径到字符串的往返。这实际上是唯一的镜头吗?
您可以使用 std::filesystem::relative
,这可能看起来像:
std::cout << fs::relative(p.path(), "sandbox") << '\n';
考虑 std::filesystem::recursive_directory_iterator
的 the documentation 中的示例:
#include <fstream>
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
fs::current_path(fs::temp_directory_path());
fs::create_directories("sandbox/a/b");
std::ofstream("sandbox/file1.txt");
fs::create_symlink("a", "sandbox/syma");
for(auto& p: fs::recursive_directory_iterator("sandbox"))
std::cout << p.path() << '\n';
fs::remove_all("sandbox");
}
Possible output:
"sandbox/a"
"sandbox/a/b"
"sandbox/file1.txt"
"sandbox/syma"
我想从输出中删除在构造 recursive_directory_iterator
时指定的 sandbox/
前缀,例如:
"a"
"a/b"
"file1.txt"
"syma"
我浏览了文档,但找不到任何相关内容。
做一点字符串处理没什么大不了的,但我不喜欢引入稍微低级的代码,从路径到字符串的往返。这实际上是唯一的镜头吗?
您可以使用 std::filesystem::relative
,这可能看起来像:
std::cout << fs::relative(p.path(), "sandbox") << '\n';