【问题标题】:boost::filesystem relative path and current directory?boost::filesystem 相对路径和当前目录?
【发布时间】:2011-04-25 13:16:05
【问题描述】:

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

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

也许帮我调试一下,如何用 boost::filesystem 获取当前工作目录?

【问题讨论】:

  • 澄清一下,我解决了我的问题。上述方法对于相对路径访问是正确的。然而,在 MSVS 中,当前的工作目录并不是我所期望的。 hmuelner 的 currentpath() 提供了帮助。

标签: c++ boost filesystems


【解决方案1】:
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 &lt;boost/filesystem.hpp&gt;

【讨论】:

  • 这里似乎有一个缺陷,这不是一个有效的 C++ 表达式,在 boost::filesystem::path 和 full_path 之间是否缺少一些东西?
  • 这不是一个有效的 C++ 表达式,而是答案的捷径。在现代 C++ 中,你可以这样写: auto cwd = boost::filesystem::current_path();
【解决方案2】:

试试system_complete 函数。

namespace fs = boost::filesystem;

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

这完全模仿了操作系统本身解析相对路径的方式。

【讨论】:

    【解决方案3】:

    如果您想切换到上一个目录,请尝试以下操作:

    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;
    

    【讨论】:

      【解决方案4】:

      当你输入“../your/path”时,你不是在指定一个类似unix的路径吗?我认为你应该做的是获得系统特定的路径:

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

      在这种情况下,“/”是以系统特定方式连接路径的运算符,而不是您指定的路径的一部分。

      【讨论】:

      • 不是真的...您正在指定内部 boost::filesystem 格式的路径,这有点像 unix。不过,我也更喜欢运算符符号。你必须做类似 path full_path = path("..") / "asset" / "toolbox";
      • 在windows中你也可以使用/作为目录分隔符。
      • 必须是boost:filesystem::path full_path(boost:filesystem::path(".." )/ "asset" / "toolbox");
      猜你喜欢
      • 2012-04-27
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 2011-12-11
      • 2015-08-22
      • 2012-09-20
      • 2011-01-13
      • 2017-08-16
      相关资源
      最近更新 更多