【发布时间】:2017-07-09 15:46:07
【问题描述】:
我需要将绝对路径 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 上它可能会有所不同(例如 @ 987654340@ 或 \\)。
【问题讨论】:
-
查看 boost::filesystem::canonical 以获取没有 .和..我相信它也删除了额外的 /
-
/usr/home/ + /abc = /abc-- 这很不寻常 -- 标准化,我希望它变成/usr/home/abc。 -
@DanMašek:一点也不稀奇。这基本上是任何接受文件名的程序所做的。给定一个绝对路径,它直接使用该路径。并给定一个相对路径,将其附加到当前工作目录。
标签: c++ boost boost-filesystem