std::filesystem::path 获取给定基本路径的相对路径而不进行临时 std::string 转换?

Sto*_*yte 3 c++

我试图找到不是从根而是从给定路径的相对路径,例如使用std::filesystem::path对象查找 2 个路径的差异,例如:

std::filesystem::path path = "/var/log", file = "/var/log/folder1/folder2/log.log";
Run Code Online (Sandbox Code Playgroud)

我预计这operator-是针对此类事情实施的,所以我期待类似的事情:

std::filesystem::path rel = file - path; //With a expected result of "folder1/folder2/log.log"
Run Code Online (Sandbox Code Playgroud)

std::mismatch编辑:经过一些研究和尝试,我终于设法像这样使用:

#include <filesystem>
#include <iostream>
#include <algorithm>

int main() {
    std::filesystem::path path, file;
    path = "/var/log";
    file = "/var/log/folder1/folder2/log.log";

    // Temporary string conversion
    std::string path_str = path.string(), file_str = file.string();

    std::filesystem::path str = std::string(std::mismatch(file_str.begin(), file_str.end(), path_str.begin()).first, file_str.end());

    std::cout << "Relative path is " << str.relative_path() << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它将输出:Relative path is "folder1/folder2/log.log"

我的问题是:如果没有临时转换,是否可以完成同样的工作std::string

Mil*_*nek 6

std::filesystem::relative有一个重载,它接受基本路径并返回相对于第二个参数的第一个参数,因此您需要的是:

auto relative_path = std::filesystem::relative(file, path);
Run Code Online (Sandbox Code Playgroud)

演示