Получить разделитель пути платформы с помощью 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;
}