我需要将绝对路径 A 与路径 B 结合起来,因为 B 可能是相对的也可能是绝对的,最好使用 boost::filesystem .
换句话说,我想要:
/usr/home/
+abc
=/usr/home/abc
/usr/home/
+../abc
=/usr/home/../abc
(或者,更好的/usr/abc
- 这不是我的问题)/usr/home/
+/abc
=/abc
前两个使用 /
运算符很容易,但我无法让第三个工作。
我试过:
std::cout << boost::filesystem::path("/usr/home/") / "/abc";
打印/usr/home//abc
。
std::cout << boost::filesystem::path("/usr/home/") + "/abc";
仍然打印/usr/home//abc
。
当然,当路径 B 是绝对路径时,我可以“看到”它并直接使用它,但我不想对前导 /
的检查进行硬编码,因为在 Windows 上它可以不同(例如 C:\\
或 \\
)。
最佳答案
boost::filesystem::path
有一个成员函数 is_absolute()
。因此,您可以基于此选择您的操作(串联或替换)。
path a = "/usr/home/";
path b = "/abc";
path c;
if (b.is_absolute())
c = b;
else
c = a / b;
还有 is_relative()
,它做相反的事情。
关于c++ - 如何结合两个 boost::filesystem::path's?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44998175/