Pregunta

¿Hay alguna forma de obtener el carácter del separador de ruta de la plataforma utilizando Boost.filesystem? Por separador de ruta, quiero decir / para unix y \ para ventanas.

Ya sé que puedo usar boost::filesystem::path::operator/ para concatenar dos rutas junto con el carácter del separador apropiado. Pero yo solo quiero / o \.

También sé que puedo usar #ifdef _WIN32, pero preferiría que Boost.filesystem me diga el carácter del separador apropiado.

Editar: quiero usar Versión 3 de la API del sistema de archivos, como se usa en Boost 1.48.

¿Fue útil?

Solución

A partir de la versión 1.57, Boost ahora tiene una mejor solución, eso es simplemente constante char / wchar_t (Dependiente de diferentes plataformas): boost::filesystem::path::preferred_separator.

Leer http://www.boost.org/doc/libs/release/libs/filesystem/doc/reference.html#operating-system-examples para más información. Hay aún más características dependientes del sistema.

Ejemplo simple:

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

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

Otros consejos

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

Efectos: El nombre de ruta contenido se convierte en el formato nativo preferido. [Nota: en Windows, el efecto es reemplazar las cortes con barras de retroceso. En Posix, no hay efecto. - Nota final

Ejemplo:

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

No he probado esto, pero parece que debería poder usar esto en un impulso reciente:

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top