std::filesystem 和 std::experimental::filesystem 之间的路径连接差异

Path concat difference between std::filesystem and std::experimental::filesystem

我正考虑从 std::experimental::filesystem 迁移到 std::filesystem,但我的单元测试开始中断。我使用 Windows、VS2019 和 MSVC 编译器以及 /std:c++latest

我将问题缩小到 standard and experimental 代码库中附加方法(和 operator/=)之间的区别。

#include <filesystem>
#include <experimental/filesystem>

int main() {
    std::filesystem::path p1 = "C:\temp";
    p1 /= "\test\file.txt";           // Expected: C:\temp\test\file.txt, Actual C:\test\file.txt

    std::experimental::filesystem::path p2 = "C:\temp";
    p2 /= "\test\file.txt";           // Expected: C:\temp\test\file.txt, Actual C:\temp\test\file.txt
}

问题:如何使用std::filesystem在Windows上附加两个路径组件以获得C:\temp\test\file.txt

当您追加绝对路径时,它会替换 p1 的所有组件,您需要从 \test\file.txt 中删除前导斜杠,使其成为相对路径,以便将其追加到 p1:

p1 /= "test\file.txt";