Pregunta

Tengo un programa que necesito ejecutar bajo * nix y windows. Debido a que el programa toma las rutas de los archivos, el problema es qué hacer con el problema \ vs / .

Mi pensamiento actual es poner una expresión regular que convierta la incorrecta en la correcta dependiendo del sistema en el que esté. Esto tendrá el efecto de permitir que cualquiera de los tipos funcione en cualquiera de los sistemas. Además del hecho de que ahora tengo dos problemas , ¿alguien ve alguno? otros problemas?

(Otras soluciones mejores son más que bienvenidas)

Editar: el problema principal es hacer que las rutas de Windows funcionen en Unix en lugar de al revés.

¿Fue útil?

Solución

El / también es totalmente compatible con win32.

Consulte también esta pregunta relacionada

Otros consejos

Windows generalmente aceptará \ o /, por lo que la estandarización en / puede simplificar su problema siempre que tenga un control completo sobre los nombres de archivo.

¿Ha considerado crear un " administrador de archivos " clase que se encargará de todos los problemas de ruta de archivo para usted? De esa manera en su aplicación de correo, cuando carga un archivo de datos, puede llamar a algo como esto.

LoadApplicationData(FileManager.GetDataFilePath)

Luego, su administrador de archivos detectará el entorno en el que se encuentra y devolverá la opción de ruta de archivo adecuada. De esa manera, también puede acomodar los estándares de ubicación Win32 vs. Unix (como Program Files vs / usr o lo que sea) también.

Tenga en cuenta que las rutas de Win32 son complejas cuando considera las letras de unidad (sin análogo en Unix) y las 'bifurcaciones' especiales (término pre-X de MacOS; del mismo modo, no hay análogo en Unix en general, aunque MacOS X las tiene) sorpresa, sorpresa ) que se pueden proporcionar. Ten cuidado.

Cree un analizador para su entrada para crear una estructura de árbol de nodos que representen directorios. Luego puede 'guardar' caminando por el árbol y escribiendo los delimitadores que desee u opcionalmente haciendo cosas diferentes, como verificar si el directorio existe o escribir meta archivos. Esto es realmente algo que ahora estoy pensando que sería útil para mi propia aplicación :-)

No dijiste qué lenguaje estás usando, así que asumiré egoístamente c / c ++. boost , si está dispuesto a usarlo, tiene un biblioteca del sistema de archivos . Por supuesto, si está utilizando un lenguaje dinámico, las bibliotecas de abstracción FS probablemente también existan allí (por ejemplo, en perl, File :: Spec es bastante estándar).

No nos ha dicho desde qué tipo de archivos está leyendo las rutas. Voy a suponer que son archivos de configuración. En cuyo caso, hay muchas maneras, en mi humilde opinión, la respuesta correcta es diseñar su programa para evitar manipular rutas, si es posible. Publiqué una respuesta aquí: https://stackoverflow.com/a/40980510/2345997 que es relevante.

ways:

  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 debajo de esta ruta base.
  3. Divide tu archivo de configuración en tres. Un archivo tendrá una configuración multiplataforma, otro archivo tendrá una configuración solo de Windows y un archivo final tendrá una configuración única de Linux. Luego, 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 archivo de configuración único de Linux.
  4. Agregue el preprocesamiento a su análisis de archivos 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 en el 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; luego, 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á a las ventanas.
  7. Cree su propio mini idioma de ruta para esto y documente 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 a su aplicación, etc ... Luego el usuario puede especificar rutas de archivo como: {root} /myfiles/bob.txt en ambas plataformas.
  8. Algunas rutas funcionarán en ambas plataformas. Por ejemplo: 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 hacia el usuario.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top