1

考虑以下文档中的示例std::filesystem::recursive_directory_iterator

#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");
}

可能的输出:

"sandbox/a"
"sandbox/a/b"
"sandbox/file1.txt"
"sandbox/syma"

我想从输出中删除sandbox/构造时指定的前缀recursive_directory_iterator,例如:

"a"
"a/b"
"file1.txt"
"syma"

我浏览了文档,但找不到任何相关内容。

做一点字符串处理并不是什么大不了的事,但我不喜欢引入一些较低级别的代码,从路径到字符串进行往返。这真的是唯一的镜头吗?

4

1 回答 1

1

您可以使用std::filesystem::relative,这可能如下所示:

std::cout << fs::relative(p.path(), "sandbox") << '\n';
于 2020-11-23T16:59:09.467 回答