boost::filesystem 相对路径和当前目录?

35

我如何使用boost::filesystem::path在Windows上指定相对路径?以下尝试失败:

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

也许为了帮助我调试,如何使用boost::filesystem获取当前工作目录?


只是为了澄清,我的问题已经解决。上述方法对于相对路径访问是正确的。但是在MSVS中,当前工作目录不是我所期望的。hmuelner的currentpath()函数有所帮助。 - Jake
4个回答

74
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>


2
这里似乎有一个缺陷,这不是一个有效的C++表达式,boost::filesystem::path和full_path之间是否缺少了什么? - Sven
2
这不是一个有效的 C++ 表达式,而是答案的一种快捷表示法。在现代 C++ 中,您可以这样写:auto cwd = boost::filesystem::current_path(); - hmuelner

20

尝试使用system_complete函数。

namespace fs = boost::filesystem;

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

这完全模拟了操作系统本身解析相对路径的过程。


2
如果您想切换到上一个目录,请尝试以下内容:

cd ..

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;

0

当你输入“../your/path”时,你是不是在指定一个类Unix的路径?我认为为了获取特定于系统的路径,你应该这样做:

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

在这种情况下,'/'是一个操作符,以系统特定的方式连接路径,并不是您指定的路径的一部分。

1
并不是真的... 你正在指定一个在内部boost::filesystem格式中有点类似于unix的路径。我更喜欢运算符表示法。你需要做的事情就像是 path full_path = path("..") / "asset" / "toolbox"; - Nathan Monteleone
2
在Windows中,你同样可以使用斜杠“/”作为目录分隔符。 - kod kristoff
4
必须使用以下代码:boost::filesystem::path full_path(boost::filesystem::path("../../../asset/toolbox")); 这行代码的作用是获取当前文件夹的上一级目录中的 /asset/toolbox 目录的完整路径。 - ar2015

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接