「C/C++」C++17 之 std::filesystem::directory_entry 文件系统目录条目
✨博客主页 | ||
---|---|---|
何曾参静谧的博客 | ||
📌文章专栏 | ||
「C/C++」C/C++程序设计 | ||
📚全部专栏 | ||
「VS」Visual Studio | 「C/C++」C/C++程序设计 | 「UG/NX」BlockUI集合 |
「Win」Windows程序设计 | 「DSA」数据结构与算法 | 「UG/NX」NX二次开发 |
「QT」QT5程序设计 | 「File」数据文件格式 | 「PK」Parasolid函数说明 |
目录
- std::filesystem::directory_entry 类详解
- 1. 引用头文件
- 2. 注意事项
- 3. 函数构造与对象初始化
- 3.1 构造函数
- 3.2 对象初始化
- 4. 修改器
- 5. 格式观察器
- 5.1 路径访问
- 5.2 文件属性检查
- 6. 分解
- 7. 查询
- 8. 迭代器
- 9. 元素比较
- 总结
- 应用场景
std::filesystem::directory_entry 类详解
1. 引用头文件
std::filesystem::directory_entry
类是 C++17 引入的文件系统库中的一个关键类,用于表示目录中的一个文件或子目录。要使用该类,首先需要包含头文件 <filesystem>
。
#include <filesystem>
2. 注意事项
std::filesystem::directory_entry
类位于std::filesystem
命名空间中,因此在使用该类时需要添加命名空间前缀std::filesystem
,或使用using
声明简化。- 该类提供了对文件系统条目的封装,使得目录遍历和文件属性查询变得简单。
3. 函数构造与对象初始化
3.1 构造函数
directory_entry
类有多个构造函数,包括默认构造函数和显式参数构造函数。
namespace fs = std::filesystem;// 默认构造函数
fs::directory_entry d1;// 显式参数构造函数
fs::directory_entry d2(fs::current_path());
fs::directory_entry d3("path/to/directory_or_file");
3.2 对象初始化
对象可以通过赋值操作符或 assign
成员函数进行初始化。
fs::directory_entry d4;
d4.assign(fs::current_path());fs::directory_entry d5 = d2; // 拷贝赋值
4. 修改器
replace_filename
成员函数允许修改目录项的文件名。
d2.replace_filename("new_name");
5. 格式观察器
5.1 路径访问
path
成员函数返回一个 std::filesystem::path
对象,表示条目的路径。
fs::path p = d2.path();
std::cout << "Path: " << p << std::endl;
5.2 文件属性检查
directory_entry
类提供了多个成员函数来检查文件类型,如 is_regular_file
、is_directory
等。
bool isFile = d2.is_regular_file();
bool isDir = d2.is_directory();
6. 分解
虽然 directory_entry
类本身不提供分解功能,但它返回的 path
对象可以通过 parent_path
、filename
等成员函数进行分解。
fs::path parent = p.parent_path();
fs::path filename = p.filename();
7. 查询
- 文件大小:
file_size
成员函数返回文件的大小(如果条目是一个文件的话)。 - 最后修改时间:
last_write_time
成员函数返回条目的最后修改时间。
auto size = d2.file_size();
auto lastWriteTime = d2.last_write_time();
8. 迭代器
directory_entry
类通常与 directory_iterator
和 recursive_directory_iterator
一起使用,用于遍历目录。
for (const auto& entry : fs::directory_iterator(fs::current_path())) {std::cout << "Path: " << entry.path() << std::endl;
}
9. 元素比较
directory_entry
类支持比较运算符,如 ==
、!=
、<
、<=
等,用于比较两个 directory_entry
对象。
fs::directory_entry d6("path/to/another_file");
if (d2 == d6) {std::cout << "d2 and d6 are equal" << std::endl;
}
总结
std::filesystem::directory_entry
类是 C++17 文件系统库中的一个核心类,用于表示目录中的一个文件或子目录。它提供了对文件系统条目的封装,使得目录遍历和文件属性查询变得简单。通过构造函数和赋值操作,可以方便地初始化对象。通过 path
成员函数和各类检查函数,可以获取条目的路径和属性。directory_entry
类还支持与迭代器一起使用,用于遍历目录。
应用场景
- 文件系统导航:遍历目录结构,获取文件和子目录信息。
- 文件属性查询:检查文件类型、大小、最后修改时间等。
- 文件管理应用:实现文件浏览器、文件管理器等功能。
通过以上对 std::filesystem::directory_entry
类的详细解析,希望读者能够更好地理解和使用该类,进行高效的文件系统操作。