「C/C++」C++17 之 std::filesystem::directory_iterator 文件系统迭代器类


✨博客主页
何曾参静谧的博客
「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 类详解)
      • [1. 引用头文件](#1. 引用头文件)
      • [2. 注意事项](#2. 注意事项)
      • [3. 函数构造与对象初始化](#3. 函数构造与对象初始化)
        • [3.1 构造函数](#3.1 构造函数)
        • [3.2 对象初始化](#3.2 对象初始化)
      • [4. 使用方法](#4. 使用方法)
        • [4.1 遍历目录](#4.1 遍历目录)
        • [4.2 检查迭代结束](#4.2 检查迭代结束)
        • [4.3 递归遍历](#4.3 递归遍历)
      • 总结
      • 应用场景

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 类的详细解析,希望读者能够更好地理解和使用该迭代器类,进行高效的文件系统遍历和操作。


相关推荐
云泽80823 分钟前
C/C++内存管理详解:从基础原理到自定义内存池原理
java·c语言·c++
weixin_3077791326 分钟前
在Linux服务器上使用Jenkins和Poetry实现Python项目自动化
linux·开发语言·python·自动化·jenkins
润 下26 分钟前
C语言——深入解析C语言指针:从基础到实践从入门到精通(四)
c语言·开发语言·人工智能·经验分享·笔记·程序人生·其他
Empty_77730 分钟前
Python编程之常用模块
开发语言·网络·python
小火柴12333 分钟前
利用R绘制箱线图
开发语言·r语言
wheeldown44 分钟前
【Linux】Linux 进程通信:System V 共享内存(最快方案)C++ 封装实战 + 通信案例,4 类经典 Bug 快速修复
linux·运维·服务器·开发语言
小年糕是糕手1 小时前
【数据结构】双向链表“0”基础知识讲解 + 实战演练
c语言·开发语言·数据结构·c++·学习·算法·链表
将车2441 小时前
C++实现二叉树搜索树
开发语言·数据结构·c++·笔记·学习
梵得儿SHI1 小时前
Java 反射机制核心类详解:Class、Constructor、Method、Field
java·开发语言·反射·class·constructor·java反射·java反射机制
hbqjzx1 小时前
记录一个自动学习的脚本开发过程
开发语言·javascript·学习