boost::filesystem::path文件路径使用详解和示例
boost::filesystem::path
是 Boost 库中用于跨平台操作文件路径的类,封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解,包括常用接口与完整示例。
1. 引入头文件与命名空间
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
2. 构造 path 对象
fs::path p1("/home/user/file.txt");
fs::path p2("file.txt");
fs::path p3 = fs::current_path(); // 获取当前目录
3. 常用成员函数
函数名 | 说明 |
---|---|
string() / wstring() | 转为字符串 |
filename() | 获取文件名部分 |
extension() | 获取扩展名(.txt) |
stem() | 获取不含扩展名的文件名 |
parent_path() | 获取父路径 |
is_absolute() / is_relative() | 判断是绝对/相对路径 |
has_extension() | 是否有扩展名 |
empty() | 判断路径是否为空 |
remove_filename() | 移除文件名部分 |
replace_extension() | 替换扩展名 |
示例:
fs::path p("/home/user/data.txt");
std::cout << p.filename() << std::endl; // data.txt
std::cout << p.stem() << std::endl; // data
std::cout << p.extension() << std::endl; // .txt
std::cout << p.parent_path() << std::endl; // /home/user
4. 拼接路径
fs::path base("/home/user");
fs::path full = base / "data" / "file.txt";
std::cout << full << std::endl; // /home/user/data/file.txt
使用 /
运算符可以自动处理路径连接。
5. 文件与路径操作(配合 boost::filesystem
)
if (fs::exists(full)) {if (fs::is_regular_file(full))std::cout << "File size: " << fs::file_size(full) << " bytes\n";else if (fs::is_directory(full))std::cout << "This is a directory.\n";
}
6. 遍历目录(directory_iterator
)
fs::path dir("/home/user/");
for (const auto& entry : fs::directory_iterator(dir)) {std::cout << entry.path().filename().string() << std::endl;
}
7. 创建 / 删除 路径
fs::create_directory("my_dir");
fs::remove("my_dir"); // 删除文件或空目录
8. 完整示例代码
#include <boost/filesystem.hpp>
#include <iostream>namespace fs = boost::filesystem;int main() {fs::path path1("/tmp/test.txt");std::cout << "Path: " << path1 << "\n";std::cout << "Filename: " << path1.filename() << "\n";std::cout << "Stem: " << path1.stem() << "\n";std::cout << "Extension: " << path1.extension() << "\n";std::cout << "Parent: " << path1.parent_path() << "\n";fs::path joined = fs::path("/tmp") / "data" / "log.txt";std::cout << "Joined path: " << joined << "\n";if (fs::exists(joined)) {std::cout << "File exists. Size: " << fs::file_size(joined) << " bytes\n";} else {std::cout << "File does not exist.\n";}return 0;
}
注意事项
- Boost Filesystem 需要链接 Boost 库,编译时添加:
g++ test.cpp -lboost_system -lboost_filesystem
- Boost Filesystem 被纳入 C++17 的
<filesystem>
,语法几乎一致,建议优先使用 C++17 时直接用标准库版本。