`
ruilin215
  • 浏览: 1148812 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

C/C++:遍历子目录,枚举文件,FindFirstFile + FindNextFile

阅读更多

  平时写程序时经常会用到的遍历子目录枚举文件的功能,用 Windows API 函数 FindFirstFile() 和 FindNextFile() 直接实现起来会相当繁琐,有许多细节需要注意和记忆,要在短时间内写出可以正常工作的、没有BUG的、能够递归遍历多层子目录并枚举其中所有文件的程序代码,不是一件轻松的事情。以下这个 doFileEnumeration() 函数,是我(liigo)在 Windows API 函数 FindFirstFile() 和 FindNextFile() 的基础上封装实现的,可以轻松自如的处理遍历子目录枚举文件的任务,使用起来非常简单,具有较高的实用价值。这个函数其实是我之前发布的易语言“辅助调试支持库”(已开源至googlecode)中“枚举文件”“枚举子目录”这两条命令的底层实现函数。

  doFileEnumeration() 函数功能是实现枚举文件和枚举子目录,支持递归处理多层子目录嵌套的情况。它有五个参数:第一个参数lpPath指定欲遍历的路径(文件夹);第二个参数bRecursion指定是否递归处理子目录;第三个参数bEnumFiles指定是枚举文件还是枚举子目录;第四个参数pFunc为用户回调函数,枚举过程中每遇到一个文件或子目录,都会调用它,并传入这个文件或子目录的完整路径;第五个参数pUserData为用户任意指定的数据,它也将被传入用户回调函数。用户回调函数(EnumerateFunc)有两个参数,一个是文件或子目录的完整路径(lpFileOrPath),一个是用户自定义数据(pUserData),它被自动调用,用户需在此函数中编码处理代码。

  这个函数经过我(liigo)的仔细设计,接口很简洁,使用也方便。有意去除了 FindFirstFile(Ex)/FindNextFile 中过滤文件名称或属性的部分功能,也是出于简化接口的考虑,——在用户回调函数中处理这些事情也是很容易的(在易语言中更容易)。在实现的细节上,重点是对子目录和递归的处理。以下是完整的源代码:

以下是应用示例代码:

分享到:
评论

相关推荐

    一个遍历根目录文件以及搜索文件的VC代码

    这些函数允许程序枚举指定目录下的所有文件和子目录。`FindFirstFile()`用于开始搜索,返回第一个文件或目录的信息;`FindNextFile()`用于获取接下来的文件或目录信息;而`FindClose()`则用于关闭搜索句柄,释放资源...

    vs2017 下 windows C/C++ 删除文件夹以及文件夹里的所有文件,遍历嵌套删除文件及文件夹

    1. **FindFirstFile** 和 **FindNextFile**:这两个函数用于枚举指定目录下的所有文件和子文件夹。它们返回一个`WIN32_FIND_DATA`结构体,包含了文件或子文件夹的详细信息,如文件名、文件大小、创建时间等。 ```...

    遍历目录,扫描文件

    这些函数允许开发者枚举指定目录下的所有文件和子目录,包括隐藏文件和系统文件。在给定的程序中,它遍历了"system32"目录,这是Windows操作系统存放动态链接库(DLL)和其他系统文件的地方。 2. **扫描文件**:...

    遍历文件夹中的所有文件

    通过`FindFirstFile`、`FindNextFile`和`FindClose`这些API,我们可以遍历指定目录及其所有子目录,并对每个文件或子目录进行相应的处理。在VC6.0或其他支持Windows API的环境中,这个功能可以方便地应用于各种文件...

    完整版枚举指定目录的所有子目录和文件例程.rar

    在IT领域,枚举目录是常见的任务,尤其是在编程中,我们经常需要遍历一个特定的目录及其所有子目录,获取其中包含的所有文件和子目录的信息。这个“完整版枚举指定目录的所有子目录和文件例程”可能是一个编程示例或...

    windows-based 遍历文件目录

    在Windows操作系统环境中,遍历文件目录是一项常见的任务,特别是在编程领域。这通常涉及到对文件系统进行深度探索,找出特定类型的文件或所有文件。本场景中,我们关注的是遍历一个指定的文件夹,并查找其中的所有...

    VC6 递归得到目录下文件列表

    这通常涉及使用Windows API函数,如`FindFirstFile`、`FindNextFile`以及`FindClose`来枚举目录中的文件和子目录。 以下是一个简单的步骤概述: 1. **初始化**:调用`FindFirstFile`函数,传入要搜索的目录路径...

    递归遍历目录并生成树

    在C++中,我们可以使用`FindFirstFile`、`FindNextFile`和`FindClose`函数来枚举目录中的文件和子目录。如果遇到子目录,我们需要调用自身来递归处理。递归是一种函数自我调用的技术,能够处理具有层级关系的数据...

    使用模拟节点枚举所有文件.7z

    当我们谈论“使用模拟节点枚举所有文件”时,我们通常是指在程序中遍历一个目录结构,包括其所有子目录和文件,同时可能使用某种形式的身份模拟来处理权限问题。这个过程在Windows操作系统中尤其常见,因为它的文件...

    MFC windows 枚举磁盘文件 递归

    这样,我们就可以遍历到该目录下的所有文件和子目录。请注意,递归调用时需要处理“.”和“..”这两个特殊目录,它们分别代表当前目录和父目录,通常不需要进一步枚举。 5. **结束枚举**:当没有更多文件可找时,`...

    遍历文件夹并建成目录树(VC++).rar

    例如,`FindFirstFile`、`FindNextFile`和`FindClose`函数用于枚举目录中的文件和子目录,而`CreateDirectory`用于创建新的目录。 3. **递归遍历**:在遍历文件夹时,通常使用递归算法。当遇到子目录时,程序会再次...

    文件枚举工具

    实现这样的文件枚举功能,通常会用到操作系统提供的API,例如在Windows系统中,可以使用FindFirstFile、FindNextFile和FindClose等函数,而在Linux或Unix系统中,则可能涉及到readdir、rewinddir等函数。这些函数...

    c++语言,获取目录

    通过具体的代码示例,我们可以清楚地了解到如何利用`FindFirstFile`和`FindNextFile`函数来遍历指定路径下的所有文件和子目录。这种方法不仅适用于简单的文件系统操作,也为更复杂的应用场景提供了基础。 此外,...

    C++编写的搜索Exe文件程序源代码

    5. 在搜索过程中,如果遇到子目录,可以选择递归进入子目录进行搜索(根据需求决定是否包含子目录)。 6. 最后,`FindClose`关闭搜索句柄,释放资源。 在源代码中,还会涉及到错误处理和异常安全。例如,当无法打开...

    文件夹遍历

    注意,这些示例并未实现递归遍历子目录的功能,如果你需要遍历整个文件夹树,你需要在`traverseDirectory`函数内部添加递归调用,以处理每个子目录。 在实际项目中,确保考虑到错误处理,比如目录不存在或无权限...

    枚举本地文件以及文件夹

    枚举是指遍历并访问指定路径下的所有文件和子文件夹。在Windows API中,可以使用`FindFirstFile`、`FindNextFile`和`FindClose`函数来实现这一功能。这些函数允许你指定一个通配符(如"*"或"**")来查找匹配的文件或...

    MFC中Tree Ctrl加载指定目录下的所有文件(更正之前只能用vs2012编译的)

    4. **填充TreeCtrl**:遍历指定目录下的所有文件和子目录,将它们作为节点添加到TreeCtrl中。可以使用FindFirstFile、FindNextFile和FindClose函数来枚举文件和目录。 ```cpp // 添加根节点 HTREEITEM hRoot = ...

    vc在硬盘上查找文件.zip

    该函数接受一个目录路径,遍历其中的文件和子目录,对每个文件检查其是否符合查找条件,对每个子目录调用自身。 4. **Windows API**:在Windows平台上,可以使用Windows API函数来查找文件。例如,`FindFirstFile`...

    MFC做的一个工具, 实现指定目录(包括子目录)的枚举,并将文件大小与全路径与对应的CRC32值输出到指定文件中保存. 输出时不需要文件夹.

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库开发一个实用工具,该工具能够遍历指定的目录及其子目录,记录每个文件的大小、完整路径以及对应的CRC32校验值,并将这些信息保存到特定的文件...

    C++API函数大全及介绍

    - `FindFirstFile` 和 `FindNextFile`:遍历目录中的文件。 - `FlushFileBuffers`:强制写入文件缓冲区的数据到磁盘。 - `FlushViewOfFile`:将内存映射文件中的更改写入磁盘。 - `GetBinaryType`:检查文件是否...

Global site tag (gtag.js) - Google Analytics