2009-06-29 10 views

Respuesta

7

Si quisiera hacerlo en tiempo de compilación que sin duda podría hacer algo como

#ifdef WIN32 
#define OS_SEP '\\' 
#else 
#define OS_SEP '/' 
#endif 

O usted podría utilizar '/' y las cosas van a funcionar bien en las ventanas (a excepción de los programas más antiguos que analizan la cadena y solo funciona con '\'). Solo se ve raro si se muestra al usuario de esa manera.

+0

Aún no lo he probado con una máquina windwos, pero si funciona, esto es suficiente para mí. – Janusz

+0

En la medida de lo posible, funcionará. Tenga en cuenta que las rutas de DOS pueden comenzar con una letra de unidad y dos puntos (de lo contrario, son relativos a la unidad actual). Y tenga cuidado con los 'tenedores' alternativos y los nombres de los dispositivos. –

+2

Windows está realmente bien con la barra diagonal. –

7

Como es tan a menudo el caso, Boost tiene una biblioteca que hace lo que quiere. Here es un tutorial.

+1

¿Realmente necesito una biblioteca "completa" para la elección entre/y \? – Janusz

+3

No, pero esa no es la única diferencia entre los nombres de archivo DOS y Unix. De hecho, las barras oblicuas son aceptadas por DOS (así como por barras diagonales inversas), pero no por el intérprete de comandos cmd.exe. –

+0

Boost es prácticamente la biblioteca estándar de C++. No es solo una biblioteca "completa". – rlbond

1

Una forma simple de hacer lo que usted pide es tener una función pequeña (probablemente en línea) que utiliza la magia del preprocesador para determinar la plataforma (#ifdef WIN32, etc.) y devuelve el caracter delimitador apropiado.

La respuesta es un poco más complicado porque hay otras diferencias más significativos que el carácter delimitador. Los sistemas de archivos de Windows pueden tener múltiples raíces (C: \, D: \, etc.), mientras que todo el FS está enraizado en/en Unix-land.

El mejor consejo podría ser utilizar boost::filesystem.

2

Use '/' internamente en todas partes. A continuación, escriba un conjunto de funciones de utilidad que importe una ruta de cualquiera de las formas al uso de '/'. Escriba una función 'ruta nativa' que tenga el ifdefs específico del sistema y las conversiones necesarias. que se puede llamar a demanda.

Cuestiones relacionadas