Не думаю, что есть встроенная функция.
Вы могли бы использовать это, хотя:
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/"
Я не думаю, любой из стандартных функций библиотеки файловой системы поддерживает то, что вы после , он всегда будет протачивать 'C:/test' как файл и' C:/test/'как каталог - пока вы не проверите его. Лучше всего было бы преобразовать в строку и проверить, заканчивается ли она разделителем путей и если нет, добавьте t o строка! – Nim