Кроссплатформенная библиотека для управления путями Windows?
-
12-09-2019 - |
Вопрос
Я пишу кросс-платформенное приложение, которое должно проверять и манипулировать путями 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
.
Решение 2
Кажется, сложно найти для этого библиотеку.Одна из возможностей заключается в PathIsRelative
в Winelib, но я не хочу использовать Winelib.
В итоге я принял очень конкретное решение только для решения этой маленькой вещи.Если предположить, что путь правильный (в моем случае это справедливо), абсолютный путь будет содержать :\
, а относительный путь — нет.
Итак, плохое, но рабочее решение:Нет подходящей библиотеки.Проверьте наличие :\
.
Другие советы
А как насчет QT с QFileInfo ?
Не могли бы вы рассказать, что программа должна делать с путями Windows в Linux?
Возможно, достаточно применить некоторое простое преобразование к строке пути Windows, синтаксически преобразуя ее в путь Unix, а затем использовать boost::filesystem для управления ею.