我手头有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
我错过了什么吗?
答案 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"