Получить разделитель пути платформы с помощью Boost.Filesystem

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

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

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

EDIT: Я хочу использовать версию 3 API Boost.Filesystem, как используется в Boost 1.48.

Ответы

Ответ 1

Начиная с версии 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;
}

Ответ 2

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

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

Пример:

namespace bfs = boost::filesystem;
bfs::path slash("/");
bfs::path::string_type preferredSlash = slash.make_preferred().native();

Ответ 3

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

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;
}