Я читаю имена путей из базы данных, которые хранятся как относительные пути в формате Windows, и пытаюсь создать из них путь boost :: filesystem :: path в системе Unix. Что происходит, так это то, что вызов конструктора интерпретирует всю строку как имя файла. Мне нужно преобразовать путь в правильный путь Posix, так как он будет использоваться локально.
Я не нашел никаких функций преобразования ни в справке по boost :: filesystem, ни в Google. Я просто слепой, есть ли очевидное решение? Если нет, как бы вы это сделали?
Пример:
std::string win_path("foo\\bar\\asdf.xml");
std::string posix_path("foo/bar/asdf.xml");
// loops just once, as part is the whole win_path interpreted as a filename
boost::filesystem::path boost_path(win_path);
BOOST_FOREACH(boost::filesystem::path part, boost_path) {
std::cout << part << std::endl;
}
// prints each path component separately
boost::filesystem::path boost_path_posix(posix_path);
BOOST_FOREACH(boost::filesystem::path part, boost_path_posix) {
std::cout << part << std::endl;
}
Редактировать: Конечно, я могу просто заменить обратную косую черту, но есть ли решение, которое "просто работает (tm)" для платформ Windows и Unix?