web-dev-qa-db-ja.com

boost :: filesystemの相対パスと現在のディレクトリ?

Windowsでboost::filesystem::pathを使用して相対パスを指定するにはどうすればよいですか?この試行は失敗します。

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

たぶん、デバッグを支援するために、boost :: filesystemで現在の作業ディレクトリを取得する方法は?

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

例:

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

アクセスするために current_path追加する必要がある#include <boost/filesystem.hpp>

61
hmuelner

system_complete 関数。

namespace fs = boost::filesystem;

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

これは、OS自体が相対パスを解決する方法を正確に模倣します。

15
ulidtko

前のディレクトリに変更する場合は、次のようなものを試してください。

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

「../your/path」と入力すると、Unixのようなパスが指定されていませんか?システム固有のパスを取得するには、次のようにする必要があります。

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

この場合、「/」はシステム固有の方法でパスを連結する演算子であり、指定したパスの一部ではありません。

0
Midnighter