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";
我正考虑从 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";