c++ - 如何使用boost在C++中获取带有尾随路径分隔符的路径

标签 c++ boost path-separator

我有这样一条路径:

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,但如果它是输入的一部分,这也会删除任何尾随双斜杠(某些应用程序将其视为具有重要意义)。

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/"

关于c++ - 如何使用boost在C++中获取带有尾随路径分隔符的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33369715/

相关文章:

c++ - 是否确保保留对 volatile 结构的单独成员的写入顺序?

c++ - 为什么 boost locale 不提供字符级规则类型?

c++ - 扫描堆栈中的字符时遇到错误

c++ - 如何在 CLion 中修复对 `GetAcceptExSockaddrs' (Boost.Asio) 的 undefined reference

c++ - 如何在 C++ 中读取 DIMACS 顶点着色图?

javascript - GoJS 图形解析器

c++ - 尝试链接到我使用 LD_PRELOAD 创建的共享库时出错

c++ - Boost::spirit::karma:复制在 repeat 或 kleene star 中不起作用?

c - 在 Windows 上获取目录分隔符字符? ('\' , '/' 等)

windows - 为什么此路径无法在 PERL 中打开 Windows 文件?