Составьте путь (с boost :: filesystem) - PullRequest
1 голос
/ 04 мая 2010

У меня есть файл, который описывает входные данные, который разбит на несколько других файлов. В моем файле дескриптора я сначала указываю путь A , который сообщает, где находятся все остальные файлы.

Создатель может установить либо относительный (к местоположению файла дескриптора), либо абсолютный путь.

Когда вызывается моя программа, пользователь дает имя файла дескриптора. Возможно, он не находится в текущем рабочем каталоге, поэтому указанное * имя файла B может также содержать каталоги.

Чтобы моя программа всегда находила входные файлы в нужных местах, мне нужно объединить эту информацию. Если указанный путь A является абсолютным, мне нужен только этот путь. Если он относительный, мне нужно объединить его с путем B (т. Е. Часть каталога с именем файла).

Я думал, boost::filesystem::complete может сделать эту работу за меня. К сожалению, похоже, что нет. Я также не понял, как проверить, является ли данный путь абсолютным или нет.

Есть идеи?

1 Ответ

2 голосов
/ 04 мая 2010

Вообще-то я сначала ошибся, но теперь сам нашел решение. Когда «base» содержит путь A, а имя файла содержит B:

boost::filesystem::path basepath(base), filepath(filename);
if (!basepath.is_complete())
    basepath = filepath.remove_leaf() /= basepath;
base = basepath.string();

По крайней мере, работает с Linux (где было бы очень легко обойтись без наддува, ну да ладно ...), все равно придется тестировать с Windows.

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