Кроссплатформенная библиотека для управления путями Windows? - PullRequest
5 голосов
/ 04 декабря 2009

Я пишу кроссплатформенное приложение, которое должно проверять и манипулировать путями Windows.

В частности, для конкретной проблемы, с которой я сейчас сталкиваюсь, мне нужно знать, является ли путь абсолютным или относительным.

В текущем коде используется boost::filesystem::path, что, конечно, работает как брелок в Windows:

boost::filesystem::path the_path(the_path_as_a_string);
if (!the_path.has_root_path()) { /* do stuff */ }

Проблема этого подхода заключается в том, что boost::filesystem::path имеет только два режима: собственный и переносной. Это означает, что грамматика пути Windows недоступна, когда я компилирую под Linux (она #ifdef исключена из исходного кода). Следовательно, путь "C: \ path" считается абсолютным в Windows, но относительным в Linux.


Можете ли вы, ребята, порекомендовать кроссплатформенную библиотеку C ++, которая может проверять и манипулировать путями Windows?


Пока единственная операция с Windows-путем, которую я сделаю, - это проверить, является ли путь абсолютным или нет.

Критерий, который я буду использовать для абсолютного пути, состоит в том, что он содержит букву диска, и путь начинается с \. Примером абсолютного пути по этому критерию является C:\path. Это оба примера относительных путей по этому критерию: C:path, \path.

Ответы [ 3 ]

1 голос
/ 04 декабря 2009

Кажется, трудно найти библиотеку для этого. Одна возможность - PathIsRelative в Winelib, но я не хочу использовать Winelib.

Я закончил тем, что сделал очень конкретное решение только для того, чтобы решить эту маленькую вещь. Если предположить, что путь правильный (в моем случае это справедливо), абсолютный путь будет содержать :\, а относительный путь - нет.

Итак, плохое, но работающее решение: нет подходящей библиотеки. Проверка на наличие :\.

1 голос
/ 04 декабря 2009

Как насчет QT с QFileInfo ?

0 голосов
/ 05 декабря 2009

Не могли бы вы рассказать, что программа должна делать с путями Windows в Linux?

Возможно, достаточно применить простое преобразование к строке пути Windows, синтаксически преобразовать его в путь Unix, а затем использовать boost :: filesystem для управления им.

...