2010-10-14 23 views
28

¿Cómo puedo usar boost::filesystem::path para especificar una ruta relativa en Windows? Este intento falla:boost :: ruta relativa del sistema de archivos y directorio actual?

boost:filesystem::path full_path("../asset/toolbox"); // invalid path or directory. 

Tal vez para ayudarme a depurar, ¿cómo obtener el directorio de trabajo actual con boost :: filesystem?

+0

Solo para aclarar, resolví mi problema. El método anterior es correcto para el acceso de ruta relativa. Sin embargo, en MSVS el directorio de trabajo actual no era lo que esperaba. hmuelner's currentpath() ayudó. – Jake

Respuesta

51
getcwd = boost::filesystem::path full_path(boost::filesystem::current_path()); 

Ejemplo:

boost::filesystem::path full_path(boost::filesystem::current_path()); 
std::cout << "Current path is : " << full_path << std::endl; 

Para acceder a current_path uno necesita añadir #include <boost/filesystem.hpp>.

+1

Parece que hay un error aquí, esta no es una expresión C++ válida, ¿falta algo entre boost :: filesystem :: path y full_path? – Sven

+1

Esta no es una expresión válida de C++, sino una notación abreviada para la respuesta. En C++ moderno, puede escribir: auto cwd = boost :: filesystem :: current_path(); – hmuelner

0

Cuando escribe "../your/path" ¿no está especificando una ruta tipo Unix? Creo que lo que debe hacer para conseguir caminos específicos del sistema es:

boost:filesystem::path full_path(".."/"asset"/"toolbox"); 

En este caso el '/' es un operador de concatenación de caminos de una manera específica del sistema y no es parte de la ruta de acceso que especifique.

+2

lo siento pero, esto no funciona? – Jake

+1

No realmente ... Está especificando una ruta en el formato boost interno :: sistema de archivos, que es un poco parecido a unix. También me gusta más la notación del operador. Tendría que hacer algo como path full_path = path ("..")/"asset"/"toolbox"; –

+2

Y en windows puede usar '/' como delimitador de directorio también. –

2

Si desea cambiar al directorio anterior y luego intentar algo como esto:

boost::filesystem::path full_path(boost::filesystem::current_path()); 
std::cout << "Current path is : " << full_path << std::endl; 

//system("cd ../"); // change to previous dir -- this is NOT working 
chdir("../"); // change to previous dir -- this IS working 

boost::filesystem::path new_full_path(boost::filesystem::current_path()); 
std::cout << "Current path is : " << new_full_path << std::endl; 
11

Pruebe la función system_complete.

namespace fs = boost::filesystem; 

fs::path full_path = fs::system_complete("../asset/toolbox"); 

Esto imita exactamente cómo el sistema operativo en sí mismo resolvería las rutas relativas.

Cuestiones relacionadas