Как получить путь с конечным разделителем пути в C ++, используя boost

У меня есть такой путь:

boost::filesystem::path mypath("c:/test");
boost::filesystem::path mypath1("c:/test/);

Я хочу убедиться, что когда я конвертирую их в строку, они оба выглядят так:

c:/test/

например, если я делаю:

cout<<mypath.string()<<endl;
cout<<mypath1.string()<<endl;

они оба распечатывают:

c:/test/

Как я могу сделать это в C ++, используя boost?

2

Решение

Я не думаю, что есть встроенная функция.

Вы можете использовать это, хотя:

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

Это не добавит разделитель, если путь заканчивается /.

При желании позвоните 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/"
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]