✨博客主页 | ||
---|---|---|
何曾参静谧的博客 | ||
「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_iterator 类详解](#std::filesystem::directory_iterator 类详解)
std::filesystem::directory_iterator 类详解
1. 引用头文件
std::filesystem::directory_iterator
类是 C++17 引入的文件系统库中的一个关键迭代器类,用于遍历目录中的文件和子目录。要使用该类,首先需要包含头文件 <filesystem>
。
cpp
#include <filesystem>
2. 注意事项
std::filesystem::directory_iterator
类位于std::filesystem
命名空间中,因此在使用该类时需要添加命名空间前缀std::filesystem
,或使用using
声明简化。- 该迭代器类提供了对目录内容的只读访问,不能用于修改目录结构或文件内容。
- 迭代器在遍历完成后会变为
directory_iterator()
的默认构造状态,表示迭代结束。
3. 函数构造与对象初始化
3.1 构造函数
directory_iterator
类有多个构造函数,包括默认构造函数和显式参数构造函数。
cpp
namespace fs = std::filesystem;
// 默认构造函数,表示迭代结束的状态
fs::directory_iterator end;
// 显式参数构造函数,用于遍历指定目录
fs::directory_iterator it(fs::current_path());
fs::directory_iterator it2("path/to/directory");
3.2 对象初始化
对象可以通过赋值操作符进行初始化,但需要注意赋值后的迭代器状态。
cpp
fs::directory_iterator it3;
it3 = it; // 拷贝赋值,现在 it3 指向与 it 相同的位置
4. 使用方法
4.1 遍历目录
directory_iterator
可以与范围 for
循环一起使用,方便地遍历目录中的文件和子目录。
cpp
fs::path dirPath = "path/to/directory";
for (const auto& entry : fs::directory_iterator(dirPath)) {
std::cout << "Path: " << entry.path() << std::endl;
if (entry.is_regular_file()) {
std::cout << " (File)" << std::endl;
} else if (entry.is_directory()) {
std::cout << " (Directory)" << std::endl;
}
}
4.2 检查迭代结束
可以使用默认构造的 directory_iterator
对象作为结束标志,或者使用 ==
运算符进行比较。
cpp
fs::directory_iterator it4("path/to/directory");
while (it4 != end) {
std::cout << "Path: " << it4->path() << std::endl;
++it4;
}
4.3 递归遍历
对于需要递归遍历目录的情况,可以使用 std::filesystem::recursive_directory_iterator
。
cpp
for (const auto& entry : fs::recursive_directory_iterator(dirPath)) {
std::cout << "Recursive Path: " << entry.path() << std::endl;
}
总结
std::filesystem::directory_iterator
类是 C++17 文件系统库中的一个强大工具,用于遍历目录中的文件和子目录。通过构造函数和赋值操作,可以方便地初始化迭代器对象。使用范围 for
循环或传统的循环结构,可以轻松地遍历目录内容。此外,还提供了递归遍历的 recursive_directory_iterator
类,以满足更复杂的遍历需求。
应用场景
- 文件系统导航:实现文件浏览器或文件管理器中的目录树功能。
- 文件搜索:在指定目录及其子目录中搜索特定文件。
- 批量处理:对目录中的多个文件进行批量重命名、复制、移动等操作。
- 统计分析:统计目录中的文件数量、文件大小、文件类型等信息。
通过以上对 std::filesystem::directory_iterator
类的详细解析,希望读者能够更好地理解和使用该迭代器类,进行高效的文件系统遍历和操作。