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 (é #ifdefed 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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top