boost :: filesystem - как создать путь повышения из строки пути Windows на платформах posix? - PullRequest
2 голосов
/ 02 июня 2010

Я читаю имена путей из базы данных, которые хранятся как относительные пути в формате 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?

Ответы [ 3 ]

3 голосов
/ 02 июня 2010

К сожалению, грамматика пути Windows условно компилируется и включается только при компиляции в Windows. Я не понимаю, почему они это сделали. В любом случае, это означает, что у вас всегда есть максимум два парсера; переносной, такой же, как Posix, и нативный, который зависит от того, для какой платформы вы сейчас компилируете.

Что могло бы "просто сработать", так это сохранить все пути в переносимом (Posix) формате. Вы можете разобрать это одинаково просто на всех платформах.

2 голосов
/ 02 июня 2010

Как насчет замены обратной косой черты на косую?

1 голос
/ 02 июня 2010

Глядя на файл заголовка, я вижу, что если вы определите BOOST_WINDOWS_PATH (до включения файла заголовка), он компилируется в алгоритме пути Windows. Я не знаю, работает ли он вне Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...