biblioteca multi-plataforma para manipular caminhos do Windows?
-
12-09-2019 - |
Pergunta
Eu estou escrevendo um aplicativo de plataforma cruzada que precisa inspecionar e manipular Windows-caminhos.
Especificamente, para o problema específico que eu estou tendo agora, eu preciso saber se um caminho é absoluto ou relativo.
O código atual usa boost::filesystem::path
qual dos trabalhos do curso como um encanto no Windows:
boost::filesystem::path the_path(the_path_as_a_string);
if (!the_path.has_root_path()) { /* do stuff */ }
O problema com esta abordagem é que boost::filesystem::path
só tem dois modos: nativos e portáteis. Isto significa que o caminho gramática do Windows não está disponível quando eu compilar em Linux (é #ifdef
ed na fonte). Assim, o caminho "C: \ path". É considerada absoluta no Windows, mas relativa em Linux
Vocês podem recomendar uma biblioteca multi-plataforma C ++ que pode inspecionar e manipular Windows-caminhos?
Por enquanto, a única operação Windows caminho que eu vou fazer é verificar se um caminho é absoluto ou não.
O critério vou usar para um caminho absoluto é que ambos contém uma letra de unidade e o caminho começa com \
. Um exemplo de um caminho absoluto sob este critério é C:\path
. Estes são dois exemplos de caminhos relativos a este critério:. C:path
, \path
Solução 2
Parece ser difícil encontrar uma biblioteca para isso. Uma possibilidade é PathIsRelative
em Winelib, mas eu não quero usar Winelib.
Acabei fazendo uma solução muito específica apenas para decidir esta coisa pequena. Assumindo que o caminho está correto (uma suposição justa no meu caso), um caminho absoluto conterá :\
, enquanto um caminho relativo não vai.
Assim, o mau, mas de trabalho, a solução é: Não há nenhuma biblioteca adequada. Verifique se há existência de :\
.
Outras dicas
E sobre QT com QFileInfo ?
Você poderia elaborar sobre o que o programa se destina a ver com os caminhos do Windows no Linux?
Talvez seja suficiente para aplicar alguma transformação simples para a cadeia de caminho do Windows, sintaticamente transformando-o em um caminho Unix, e depois usar boost :: filesystem para manipulá-lo.