Получить разделитель пути платформы с помощью Boost.Filesystem - PullRequest
15 голосов
/ 05 декабря 2011

Есть ли способ получить символ разделителя пути платформы, используя Boost.Filesystem ?Под разделителем путей я подразумеваю / для Unix и \ для Windows.

Я уже знаю, что могу использовать boost::filesystem::path::operator/ для объединения двух путей вместе с соответствующим символом-разделителем.Но я просто хочу либо /, либо \.

Я также знаю, что могу использовать #ifdef _WIN32, но я бы предпочел, чтобы Boost.Filesystem сообщала мне соответствующий символ-разделитель.

EDIT: я хочу использовать версию 3 API-интерфейса Boost.Filesystem, используемого в Boost 1.48.

Ответы [ 3 ]

13 голосов
/ 05 декабря 2011

Кажется, что boost::filesystem::path::make_preferred - это билет:

Эффекты: Содержимое пути преобразуется в предпочтительный собственный формат.[Примечание: В Windows эффект заменяет косую черту на обратную.На POSIX эффекта нет.- примечание конца]

Пример:

namespace bfs = boost::filesystem;
bfs::path slash("/");
bfs::path::string_type preferredSlash = slash.make_preferred().native();
9 голосов
/ 19 декабря 2014

Начиная с версии 1.57, Boost теперь имеет лучшее решение, которое является постоянным char / wchar_t (зависит от разных платформ): boost::filesystem::path::preferred_separator.

Чтение http://www.boost.org/doc/libs/release/libs/filesystem/doc/reference.html#Operating-system-examplesдля дополнительной информации.В нем еще больше системных функций.

Простой пример:

#include <boost/filesystem.hpp>
#include <iostream>

int main() {
    std::cout << boost::filesystem::path::preferred_separator << std::endl;
}
1 голос
/ 05 декабря 2011

Не проверял это, но похоже, что вы сможете использовать его для недавнего повышения:

http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/reference.html

#include <boost/filesystem.hpp>
#include <iostream>

int main() {
    std::cout << boost::filesystem::slash<boost::filesystem::path>::value << std::endl;
}
...