Pregunta

¿Existe alguna clase independiente de C++ GNU que maneje rutas multiplataforma?Mis aplicaciones se basan en Windows y LInux.Nuestros archivos de configuración hacen referencia a otro archivo en un directorio separado.Me gustaría poder leer la ruta del otro archivo de configuración en una clase que funcione tanto en Linux como en Windows.

¿Qué clase ofrecería el menor espacio para traducir rutas para usar en cualquiera de los sistemas?Gracias

¿Fue útil?

Solución

A menos que estés usando rutas absolutas, no hay necesidad de traducir en absoluto: Windows convierte automáticamente las barras diagonales en barras invertidas, por lo que si usas rutas relativas con separadores de barras diagonales, estarás dorado.Realmente deberías evitar las rutas absolutas si es posible.

Otros consejos

Biblioteca del sistema de archivos in boost probablemente te ayudará.

Hay muchas maneras, en mi humilde opinión la respuesta correcta es rediseñar su programa para evitar manipular rutas.Publiqué una respuesta aquí: https://stackoverflow.com/a/40980510/2345997 lo cual es relevante.

maneras:

  1. Agregue una opción de línea de comando que permita al usuario especificar la ruta en cuestión en lugar de leerla desde un archivo de configuración.
  2. Agregue una opción de línea de comando para que el usuario pueda especificar una ruta base.Las rutas en el archivo de configuración se interpretarán como ubicadas en esta ruta base.
  3. Divide tu archivo de configuración en tres.Un archivo tendrá configuración multiplataforma, otro archivo tendrá configuración solo para Windows y un archivo final tendrá configuración solo para Linux.Luego, el usuario puede especificar la ruta correcta tanto para Windows como para Linux.En Windows, su programa leerá el archivo de configuración multiplataforma y el archivo de configuración exclusivo de Windows.En Linux leerá el archivo multiplataforma y el archivo de configuración exclusivo de Linux.
  4. Agregue preprocesamiento al análisis de su archivo de configuración.Esto le permitirá tener un archivo de configuración donde el usuario puede hacer que su programa ignore algunas de las líneas del archivo dependiendo del sistema operativo en el que se esté ejecutando el programa.Por lo tanto, el usuario podrá especificar la ruta al archivo dos veces.Una vez para Linux y otra para Windows.
  5. Cambie el diseño para que los archivos siempre estén ubicados en el mismo directorio que su ejecutable; entonces el usuario solo especifica los nombres de los archivos en el archivo de configuración en lugar de las rutas a los archivos.
  6. Utilice una función sencilla que cambie "/" a "\".Luego documente al usuario que debe especificar rutas como rutas de Linux y esta transformación se aplicará para Windows.
  7. Cree su propio minilenguaje de ruta para esto y documentelo para el usuario.P.ej:"/" - especifica un separador de directorio, {root} - se expande a la raíz del sistema de archivos, {cwd} - se expande al directorio actual, {app} - se expande a la ruta a su aplicación, etc...Luego, el usuario puede especificar rutas de archivos como:{root}/myfiles/bob.txt en ambas plataformas.
  8. Algunas rutas funcionarán en ambas plataformas.P.ej:rutas relativas como ../mis archivos/bill.txt.Restrinja su aplicación para que solo funcione con estas rutas.Documente esta limitación y cómo su aplicación maneja las rutas al usuario.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top