web-dev-qa-db-fra.com

boost :: chemin relatif du système de fichiers et répertoire courant?

Comment utiliser boost::filesystem::path pour spécifier un chemin relatif sous Windows? Cette tentative échoue:

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

Peut-être pour m'aider à déboguer, comment obtenir le répertoire de travail actuel avec boost :: filesystem?

32
Jake
getcwd = boost::filesystem::path full_path(boost::filesystem::current_path());

Exemple:

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

Pour accéder à current_path, il faut ajouter #include <boost/filesystem.hpp>.

59
hmuelner

Essayez la fonction system_complete .

namespace fs = boost::filesystem;

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

Cela imite exactement comment le système d'exploitation lui-même résoudrait les chemins relatifs.

15
ulidtko

Si vous voulez changer de répertoire, essayez quelque chose comme ceci:

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;
2
serup

Lorsque vous tapez "../your/path", ne spécifiez-vous pas un chemin semblable à Unix? Je pense que ce que vous devriez faire pour obtenir des chemins spécifiques au système est:

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

Dans ce cas, le '/' est un opérateur concaténant des chemins de manière spécifique au système et ne fait pas partie du chemin que vous spécifiez.

0
Midnighter