2009-12-04 21 views
5

Estoy escribiendo una aplicación multiplataforma que necesita inspeccionar y manipular las rutas de Windows.Biblioteca multiplataforma para manipular rutas de Windows?

Específicamente, para el problema particular que estoy teniendo ahora, necesito saber si un camino es absoluto o relativo.

El código actual utiliza boost::filesystem::path que por supuesto funciona como un encanto en Windows:

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

El problema con este enfoque es que boost::filesystem::path sólo tiene dos modos: nativas y portátiles. Esto significa que la gramática de ruta de Windows no está disponible cuando compilo en Linux (es #ifdef editado en la fuente). Por lo tanto, la ruta "C: \ ruta" se considera absoluta en Windows, pero relativa en Linux.


¿Pueden ustedes recomendar una biblioteca de C++ multiplataforma que pueda inspeccionar y manipular las rutas de Windows?


Por ahora, la única operación de ruta de Windows que haré es comprobar si una ruta es absoluta o no.

El criterio que usaré para una ruta absoluta es que contiene una letra de unidad y la ruta comienza con \. Un ejemplo de una ruta absoluta bajo este criterio es C:\path. Estos son ejemplos de rutas relativas bajo este criterio: C:path, \path.

+0

¿Sabía que la distinción no es esa en blanco y negro? Considere la ruta válida 'C: foo.txt'. Utiliza el directorio de trabajo actual _de C: drive_! – MSalters

+1

MSalters: no había pensado en eso cuando hice la pregunta. También parece que el escritor original del código que trato de mantener no lo había pensado. Ahora tengo que averiguar qué comportamiento queremos realmente ... –

Respuesta

0

Parece ser difícil encontrar una biblioteca para esto. Una posibilidad es PathIsRelative en Winelib, pero no quiero usar Winelib.

Terminé haciendo una solución muy específica solo para decidir esta pequeña cosa. Suponiendo que la ruta sea correcta (una suposición razonable en mi caso), una ruta absoluta contendrá :\, mientras que una ruta relativa no lo hará.

Entonces, la solución mala, pero funcional, es: No hay una biblioteca adecuada. Verifique la existencia de :\.

1

¿Qué hay de QT con QFileInfo?

+0

Parece que tiene la misma suposición básica, y falla, como impulso; La gramática de Windows está disponible solo cuando se compila en Windows :( –

+0

¡Entonces, compárelo cruz! :) – alexkr

0

¿Podría explicarnos qué pretende hacer el programa con las rutas de Windows en Linux?

Quizás sea suficiente aplicar alguna transformación simple a la cadena de ruta de Windows, sintácticamente transformándola en una ruta de Unix, y luego usar boost :: filesystem para manipularla.

Cuestiones relacionadas