2011-12-05 11 views
14

¿Hay alguna forma de obtener el carácter separador de ruta de la plataforma usando Boost.Filesystem? Por separador de ruta, quiero decir / para Unix y \ para Windows.Obtener el separador de ruta de la plataforma con Boost.Filesystem

Ya sé que puedo usar boost::filesystem::path::operator/ para concatenar dos caminos junto con el caracter separador apropiado. Pero solo quiero / o \.

También sé que puedo usar #ifdef _WIN32, pero preferiría que Boost.Filesystem me diga el caracter separador apropiado.

EDIT: Quiero usar version 3 de la API Boost.Filesystem, como se usa en Boost 1.48.

+0

D'oh! Estaba buscando una API que me diera directamente el separador de ruta, y no pensé en usar simplemente: 'boost :: filesystem :: path ("/"). Native()' –

+0

¿Alguien puede confirmar que 'boost :: : filesystem :: path ("/"). native() 'returns' "\\" 'en Windows? –

+3

Para que lo sepas, Windows acepta '/' como el separador pafh. – Xeo

Respuesta

8

partir de la versión 1.57, Boost ahora tiene una mejor solución, que es sólo constante char/wchar_t (depende de diferentes plataformas): boost::filesystem::path::preferred_separator.

Lea http://www.boost.org/doc/libs/release/libs/filesystem/doc/reference.html#Operating-system-examples para obtener más información. Hay incluso más funciones dependientes del sistema.

ejemplo simple:

#include <boost/filesystem.hpp> 
#include <iostream> 

int main() { 
    std::cout << boost::filesystem::path::preferred_separator << std::endl; 
} 
+0

Un vistazo rápido a través de la fuente de impulso revela que boost solo usa un ifdef para obtener el separador durante la etapa de preprocesador. En este caso, no hay necesidad de usar boost pero también, si están en un sistema de archivos no estándar en un cuadro * nix, entonces boost asumirá de manera incorrecta /. – tom

+0

Esto no da el separador correcto en VS2015. –

1

no he probado esto, pero parece que usted debería ser capaz de utilizar esto en una reciente impulso:

http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/reference.html

#include <boost/filesystem.hpp> 
#include <iostream> 

int main() { 
    std::cout << boost::filesystem::slash<boost::filesystem::path>::value << std::endl; 
} 
+1

Lamentablemente, 'slash' ya no parece ser parte de la API. –

11

Parece que boost::filesystem::path::make_preferred es el billete:

Efectos: el nombre de ruta contenido se convierte al formato nativo preferido . [Nota: en Windows, el efecto es reemplazar barras oblicuas con barras diagonales inversas. En POSIX, no hay efecto. - nota final]

Ejemplo:

namespace bfs = boost::filesystem; 
bfs::path slash("/"); 
bfs::path::string_type preferredSlash = slash.make_preferred().native(); 
+0

Nueva URL http://www.boost.org/doc/libs/release/libs/filesystem/doc/reference.html#path-make_preferred – KindDragon

+0

@KindDragon: Gracias –

+0

En Windows esto no se compilará, como native() devolverá std :: wstring. Sin embargo, eso es irrelevante para los propósitos de esta pregunta. – AI0867

Cuestiones relacionadas