3

我有这样的路径:

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++ 中做到这一点?

4

1 回答 1

1

我认为没有内置函数。

不过,您可以使用它:

if ("." != p.filename()) 
   p += fs::path::preferred_separator;

如果路径以/.

可选地,p.remove_trailing_separator首先调用,但如果它是输入的一部分,这也会删除任何尾随双斜杠(某些应用程序将其视为具有重要意义)。

Live On Coliru

#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/"
于 2015-10-28T09:40:39.907 回答