2008-09-23 8 views
12

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

¿Qué clase ofrecería la huella más pequeña para traducir rutas para usar en cualquier sistema? Gracias

Respuesta

9

A menos que esté utilizando rutas absolutas, no hay necesidad de traducir en absoluto: Windows convierte automáticamente las barras diagonales en barras diagonales inversas, por lo que si utiliza rutas relativas con separadores de ruta de barra diagonal, estará dorado. Realmente deberías evitar caminos absolutos si es posible.

+0

Por la simple necesidad que tengo, esto es perfecto. – Superpolock

+1

no es portátil para sistemas operativos con diferentes reglas de escape, comillas y delimitadores (p., Mac) – jwfearn

0

Hay muchas formas, en mi humilde opinión la respuesta correcta es rediseñar su programa para evitar la manipulación de rutas. He publicado una respuesta aquí: https://stackoverflow.com/a/40980510/2345997 que es relevante.

maneras:

  1. añadir una opción de línea de comandos que permite a un usuario especificar la ruta en cuestión en lugar de leer 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 debajo de esta ruta base.
  3. Divida su archivo de configuración en tres. Un archivo tendrá configuración multiplataforma, otro archivo tendrá configuración solo de Windows y un archivo final tendrá configuración solo de Linux. Entonces el usuario puede especificar la ruta correcta para Windows y Linux. En Windows, su programa leerá el archivo de configuración multiplataforma y el archivo de configuración solo de Windows. En Linux, leerá el archivo multiplataforma y el único archivo de configuración de Linux.
  4. Agregue preprocesamiento a su archivo de configuración de análisis. 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, según el sistema operativo en el que se ejecute el programa. Por lo tanto, el usuario podrá especificar la ruta al archivo dos veces. Una vez para Linux y una vez para Windows.
  5. Cambie el diseño para que los archivos siempre se encuentren en el mismo directorio que el ejecutable; a continuación, el usuario solo especifica los nombres de archivo en el archivo de configuración en lugar de las rutas a los archivos.
  6. Use una función simple 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 mini-lenguaje de ruta para esto y documentéelo al usuario. Por ejemplo: "/" - 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 de acceso a su aplicación, etc ... Luego el el usuario puede especificar rutas de archivos como: {root} /myfiles/bob.txt en ambas plataformas.
  8. Algunas rutas funcionarán en ambas plataformas. E.g: rutas relativas como ../my files/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.
Cuestiones relacionadas