std::filesystem使用笔记

本文详细介绍了C++17引入的filesystem标准库,涵盖了路径判断、文件操作(如创建、删除、移动)、目录遍历、获取文件信息以及路径管理等功能,为开发者提供了处理文件系统的一站式解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++17引入了filesystem标准库,该库提供了一组类和函数,用于处理文件系统中的文件和目录。使用库,可以方便地执行文件和目录的各种操作,如创建、复制、移动、删除文件或目录,遍历目录,获取文件属性等。

1. 头文件

#include <filesystem>

2. 函数介绍

2.1. 路径判断

std::filesystem::system_complete(path);   // 返回完整路径(相对路径 + 当前路径)
std::filesystem::exists(path);   // 目录是否存在
std::filesystem::is_directory(path); // 是否是路径
std::filesystem::is_empty(path);   // 文件夹是否为空,必须保证路径存在,否则抛异常
std::filesystem::is_regular_file(path);  // 是否是普通文件
std::filesystem::is_symlink(path); // 是否是一个链接文件
std::filesystem::file_status std::filesystem::status(path);   // 返回路径名对应的状态

2.2. 路径获取

std::filesystem::initial_path();   // 得到程序运行时的系统当前路径
std::filesystem::current_path();   // 得到系统当前路径
std::filesystem::current_path(const Path& p);   // 改变当前路径
 
std::filesystem::path
### C++ `std::filesystem` 使用方法 #### 创建路径对象 为了使用文件系统的功能,通常会先创建一个 `std::filesystem::path` 对象。此对象能够表示文件或者目录的位置,并提供了多种操作路径的方法。 ```cpp #include <iostream> #include <filesystem> namespace fs = std::filesystem; int main() { fs::path p("/home/user/documents/file.txt"); if (fs::exists(p)) { // 检查路径是否存在 std::cout << "Path exists." << '\n'; } else { std::cout << "Path does not exist." << '\n'; } } ``` #### 遍历目录内容 通过 `std::filesystem::directory_iterator` 可以轻松地遍历指定目录下的所有项,无论是文件还是子目录都可以被访问到。 ```cpp for (const auto& entry : fs::directory_iterator(".")) { std::cout << entry.path().filename() << '\n'; // 输出每个条目的名称 } ``` #### 获取文件属性 利用 `std::filesystem::file_status` 和其他辅助函数可以获得关于文件的各种元数据信息,比如大小、最后修改时间等。 ```cpp if (fs::is_regular_file(p)) { std::cout << "Size: " << fs::file_size(p) << " bytes\n"; } auto last_write_time = fs::last_write_time(p); // 将 time_point 转换为可读的时间字符串... ``` #### 处理错误转换问题 当遇到像 ‘initializing’ : 无法将 ‘boost::filesystem3::path’ 转换为 ‘std::basic_string’ 这样的编译期错误时[^1],这通常是由于尝试直接把 `boost::filesystem::path` 类型的对象赋给 `std::string` 或者作为参数传递给期望接收字符串的地方所引起的。解决办法是在必要时候调用 `.string()` 方法显式转换: ```cpp std::string str_path = boost_fs_path.string(); // 正确做法 // 错误示范:std::string wrong(str_path); // 不要这样做 ``` 对于现代C++项目来说,推荐尽可能采用标准库而非Boost版本的文件系统接口,除非有特殊需求必须依赖后者。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值