附加到 boost::filesystem::path

新手上路,请多包涵

我手头有一个 boost::filesystem::path 我想在它上面附加一个字符串(或路径)。

 boost::filesystem::path p("c:\\dir");
p.append(".foo"); // should result in p pointing to c:\dir.foo

唯一的过载 boost::filesystem::pathappend 想要两个 InputIterator s。

到目前为止,我的解决方案是执行以下操作:

 boost::filesystem::path p2(std::string(p.string()).append(".foo"));

我错过了什么吗?

原文由 Zack 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 533
2 个回答
#include <iostream>
#include <string>
#include <boost/filesystem.hpp>

int main() {
  boost::filesystem::path p (__FILE__);

  std::string new_filename = p.leaf() + ".foo";
  p.remove_leaf() /= new_filename;
  std::cout << p << '\n';

  return 0;
}

使用 1.37 进行测试,但 Leaf 和 _removeleaf 也记录在 1.35 中。您需要先测试 p 的最后一个组件是否是文件名,如果可能不是。

原文由 Roger Pate 发布,翻译遵循 CC BY-SA 2.5 许可协议

您可以自己定义 + 运算符,这样您就可以添加两个 boost::filesystem::path 变量。

 inline boost::filesystem::path operator+(boost::filesystem::path left, boost::filesystem::path right){return boost::filesystem::path(left)+=right;}

然后你甚至可以添加一个 std::string 变量(隐式转换)。这类似于 operator/ 的定义

包括/升压/文件系统/path.hpp:

 inline path operator/(const path& lhs, const path& rhs)  { return path(lhs) /= rhs; }

这是一个工作示例:

主.cpp

 #include <iostream>
#include <string>
#include <boost/filesystem.hpp>

using namespace boost::filesystem;
inline path operator+(path left, path right){return path(left)+=right;}

int main() {
  path p1 = "/base/path";
  path p2 = "/add/this";
  std::string extension=".ext";
  std::cout << p1+p2+extension << '\n';
  return 0;
}

编译

g++ main.cpp -lboost_system -lboost_filesystem

产生输出:

 $ ./a.out
"/base/path/add/this.ext"

原文由 phinz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题