如何结合两个boost :: filesystem :: path?

rus*_*tyx 2 c++ boost boost-filesystem

我需要将绝对路径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";
Run Code Online (Sandbox Code Playgroud)

印刷品/usr/home//abc

std::cout << boost::filesystem::path("/usr/home/") + "/abc";
Run Code Online (Sandbox Code Playgroud)

仍然打印/usr/home//abc

当然,通过查看路径B并使用它,我可以“看到”路径B是绝对路径,但我不想硬编码前导的检查,/因为在Windows上路径可以不同(例如C:\\\\)。

Ben*_*ley 5

boost::filesystem::path具有成员函数is_absolute()。因此,您可以基于此选择操作(串联还是替换)。

path a = "/usr/home/";
path b = "/abc";
path c;

if (b.is_absolute())
    c = b;
else
    c = a / b;
Run Code Online (Sandbox Code Playgroud)

也有is_relative()相反的。

  • @BenjaminLindley我认为有一个更适合的功能(因为它处理`root_name`s)。看我的答案 (2认同)