2010-05-04 3 views
1

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

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

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

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

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

Любые идеи?

ответ

2

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

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

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