Pregunta

Estoy escribiendo una aplicación multiplataforma que necesita para inspeccionar y manipular las Windows-caminos.

En concreto, para el problema particular que estoy teniendo ahora, necesito saber si un camino es absoluta o relativa.

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 solamente tiene dos modos: nativas y portátiles. Esto significa que la gramática ruta de Windows no está disponible cuando compilo bajo Linux (se #ifdefed en la fuente). Por lo tanto, la ruta de acceso. "C: \ path" se considera absoluta en Windows, pero relativa en Linux


Pueden ustedes recomendar una multiplataforma biblioteca de C ++ que pueden inspeccionar y manipular las Windows-caminos?


Por ahora, la única operación de Windows-camino que va a hacer es comprobar si un camino es absoluta o no.

El criterio voy a utilizar para una ruta absoluta es que tanto contiene una letra de unidad, y el camino comienza con \. se C:\path Un ejemplo de una ruta absoluta en este criterio. Estos son ejemplos de rutas relativas en este criterio:. C:path, \path

¿Fue útil?

Solución 2

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

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

Por lo tanto, el mal, pero trabajando, la solución es la siguiente: No hay ninguna biblioteca adecuada. Compruebe si hay existencia de :\.

Otros consejos

¿Qué hay de QT con QFileInfo ?

Podría explicar lo que el programa está destinado a hacer con las rutas de Windows en Linux?

Tal vez es suficiente para aplicar alguna transformación sencilla de la cadena de ruta de Windows, sintácticamente transformándolo en un camino de Unix, y luego usar boost :: sistema de archivos para manipularlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top