附加到boost :: filesystem :: path

时间:2010-03-07 14:20:53

标签: c++ boost

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

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

唯一重载boost::filesystem::path的{​​{1}}需要两个append

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

InputIterator

我错过了什么吗?

5 个答案:

答案 0 :(得分:58)

如果它只是您想要更改的文件扩展名,那么您可能最好不要写:

p.replace_extension(".foo");

对于大多数其他文件路径操作,您可以使用运算符/=/来连接名称的各个部分。例如

boost::filesystem::path p("c:\\dir");
p /= "subdir";

将引用c:\dir\subdir

答案 1 :(得分:30)

#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 remove_leaf 也记录在1.35中。你需要先测试 p 的最后一个组件是否是文件名,如果它不是。

答案 2 :(得分:9)

使用文件系统库的第3版(Boost 1.55.0),它就像

一样简单
boost::filesystem::path p("one_path");
p += "_and_another_one";

产生p = "one_path_and_another_one"

答案 3 :(得分:4)

path p;
std::string st = "yoo";
p /= st + ".foo";

答案 4 :(得分:1)

您可以自行定义+运算符,以便添加两个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; }

这是一个有效的例子:

<强>的main.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"