我有这样一条路径:
boost::filesystem::path mypath("c:/test");
boost::filesystem::path mypath1("c:/test/);
我想确保当我将它们转换为字符串时,它们都显示为:
c:/test/
例如,如果我这样做:
cout<<mypath.string()<<endl;
cout<<mypath1.string()<<endl;
两者都打印出来:
c:/test/
我如何使用 boost 在 C++ 中执行此操作?
最佳答案
我认为没有内置函数。
不过你可以使用这个:
if ("." != p.filename())
p += fs::path::preferred_separator;
This will not add the separator if the path ends in
/.
可选地,首先调用 p.remove_trailing_separator
,但如果它是输入的一部分,这也会删除任何尾随双斜杠(某些应用程序将其视为具有重要意义)。
#include <boost/filesystem.hpp>
#include <boost/range/iterator_range.hpp>
#include <iostream>
namespace fs = boost::filesystem;
int main(int argc, char** argv) {
for (std::string s : boost::make_iterator_range(argv+1, argv+argc)) {
fs::path p = s;
//p.remove_trailing_separator();
if ("." != p.filename())
p += fs::path::preferred_separator;
std::cout << "'" << s << "'\t" << p << "\n";
}
}
打印(显然是在 Linux 上):
'.' "."
'' "/"
'/' "//"
'/tmp' "/tmp/"
'/tmp/' "/tmp/"
'/tmp//' "/tmp//"
'/tmp/.' "/tmp/."
'/tmp/..' "/tmp/../"
'/tmp/...' "/tmp/.../"
'/tmp/aa.txt' "/tmp/aa.txt/"
'c:\test.txt' "c:\test.txt/"
关于c++ - 如何使用boost在C++中获取带有尾随路径分隔符的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33369715/