2012-05-09 12 views
9

¿Cómo puedo obtener el separador de ruta específico de la plataforma (no separador de directorios) en C++, es decir, el separador que se necesita para combinar varias rutas en una lista (por ejemplo, PATH variable de entorno).¿Cómo obtener el separador de ruta específico de la plataforma en C++?

En Linux, esto sería :, bajo Windows ;.

En otras palabras, estoy buscando el C++ - equivalente de Python os.pathsep, path.separator de Java o PHP PATH_SEPARATOR.

Si Boost proporciona una función tal que estaría bien, ya que la estamos usando en nuestros proyectos de todos modos. Si no, creo que cualquier otra solución sería buena.

Todo lo que pude encontrar (aquí y en cualquier otro lugar) fueron solo formas de recuperar el separador de directorios (es decir, / vs. \) o relacionado con otros lenguajes además de C++.

+0

posible duplicado de [Obtener separador de ruta de la plataforma usando Boost.Filesystem] (http://stackoverflow.com/questions/8384477/obtain -plataformas-camino-separador-usando-impulsar-sistema de archivos) – Flexo

+3

@awoodland: ¿De verdad? ¿Leíste la pregunta? – Nick

+0

@Nick - Oops, lo siento, leí mucho la frase "separador de ruta" y recordé esa pregunta - definitivamente no es un duplicado, entonces – Flexo

Respuesta

6

Según comentario, una posibilidad sería utilizar el preprocesador:

#ifdef _WIN32 
const std::string os_pathsep(";"); 
#else 
const std::string os_pathsep(":"); 
#endif 
+0

De acuerdo. Estamos hablando de 5 líneas de código, aquí. Podrías haber escrito esto 100 veces en el tiempo que tardó en googlearlo y hacer una pregunta en SO. No todo requiere una solución altamente diseñada, elegante y sublime. –

+0

Muchas cosas dependientes de la plataforma pueden reducirse a unas pocas líneas de código. Sin embargo, hay bibliotecas (como la anterior APR, también esperaba Boost) que brinden esta funcionalidad y se aseguren de que las plataformas futuras se atiendan adecuadamente sin que yo me ocupe de esto. Me sorprendió que muchos otros idiomas (o libraires para aquellos) proporcionan esto, pero C++ no. –

+0

Como estoy seguro de que sabe, estas bibliotecas generalmente dependen de que las personas dediquen su tiempo libre a la mejora. ¿Por qué no tener un ir usted mismo y obtener algo agregado a la biblioteca boost :: filesystem? – Nick

4

La única manera portátil más allá del uso del preprocesador que puedo encontrar sería a través de la Apache portátil Tiempo de ejecución:

apr_filepath_list_merge y apr_filepath_list_split

Se puede echar un vistazo y ver cómo éstas se implementan, pero Supongo que solo sería una definición de preprocesador.

+0

¡Usar la APR solo para esto probablemente sería exagerado sin embargo ...! – Nick

+0

Acabo de comprobar el código. APR tiene implementaciones dependientes de la plataforma (archivos de origen separados) en las que el carácter apropiado está codificado de forma rígida dentro de las funciones. –

Cuestiones relacionadas