2010-10-14 17 views
28

Come è possibile utilizzare boost::filesystem::path per specificare un percorso relativo su Windows? Questo tentativo non riesce:boost :: percorso relativo al file system e directory corrente?

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

Forse per aiutarmi a eseguire il debug, come ottenere la directory di lavoro corrente con boost :: filesystem?

+0

Giusto per chiarire, ho risolto il mio problema. Il metodo sopra è corretto per l'accesso al percorso relativo. Tuttavia, in MSVS l'attuale directory di lavoro non era quella che mi aspettavo. hmuelner's currentpath() ha aiutato. – Jake

risposta

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

Esempio:

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

Per accedere current_path uno ha bisogno di aggiungere #include <boost/filesystem.hpp>.

+1

sembra esserci un difetto qui, questa non è un'espressione C++ valida, manca qualcosa tra boost :: filesystem :: path e full_path? – Sven

+1

Questa non è un'espressione C++ valida, ma una notazione breve per la risposta. Nel moderno C++ potresti scrivere: auto cwd = boost :: filesystem :: current_path(); – hmuelner

0

Quando si digita "../your/path" non si specifica un percorso unix-like? Credo che ciò che si dovrebbe fare per ottenere percorsi specifici del sistema è:

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

In questo caso il '/' è un operatore concatenando i percorsi in modo specifico del sistema e non è parte del percorso che si specifica.

+2

scusa ma, questo non funziona? – Jake

+1

Non proprio ... Stai specificando un percorso nel formato boost interno :: filesystem, che è un po 'unix-like. Mi piace anche la notazione dell'operatore meglio però. Dovresti fare qualcosa come path full_path = path ("..")/"asset"/"toolbox"; –

+2

E in Windows puoi usare anche '/' come delimitatore di directory. –

2

Se si desidera modificare alla directory precedente quindi provare qualcosa di simile:

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

Prova la funzione system_complete.

namespace fs = boost::filesystem; 

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

Questo simula esattamente come il sistema operativo stesso potrebbe risolvere i percorsi relativi.

Problemi correlati