当前位置: 首页 > news >正文

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 时直接用标准库版本。

相关文章:

  • Spring MVC执行流程简介
  • 玩转 Skia 的颜色
  • LeetCode - 543. 二叉树的直径
  • 如何开发ONLYOFFICE协作空间插件:完整教程
  • 大学生职业发展与就业创业指导教学评价
  • Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
  • std::ratio 简单使用举例
  • Cell的复用及自定义Cell
  • 【Zephyr 系列 16】构建 BLE + LoRa 协同通信系统:网关转发与混合调度实战
  • EasyImage实战:结合内网穿透技术实现私有图床部署过程
  • 创客匠人:赋能创始人IP打造,破局知识变现的黄金路径
  • Android实践:查看远程文档
  • 接口自动化测试-效果展示
  • 2025年文化交流与创新教育国际会议(ICCEIE 2025)
  • 合成来源图以在入侵检测系统中进行数据增强
  • RAG质量评估
  • 【易飞】通过信息传递触发时机复制生成品号实现复制品号自动带出原自定义字段数据
  • 马克思主义与社会科学方法论通俗版
  • MeanFlow:何凯明新作,单步去噪图像生成新SOTA
  • DAY 19 常见的特征筛选算法