c++ - 如何结合两个 boost::filesystem::path's?

标签 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";

打印/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/

相关文章:

c++ - 如果我将类声明为 const...而不是 constexpr,程序将无法运行?

c++ - 如何使用 Boost 预处理器扩展字符串

c++ - 我正在尝试使用此 Boost C++ 代码,但遇到问题

C++ - 如何以平台无关、线程安全的方式将文件的上次修改日期和时间格式化为用户首选的日期/时间区域设置格式

c++ - 在类的不同实例的不同线程中使用 "pcl::visualization"

c++ - 将现有的 C++ dll 与 Windows Phone 组件运行时链接

linux - 在 Linux 中 boost 安装

c++ - 如何以阻塞方式删除文件/文件夹?

c++ - LNK1104 尝试与 boost_filesystem*.lib 链接时

c++ - 如何使用 regex_replace?