C语言实现递归遍历文件夹示例代码

5星 · 超过95%的资源 需积分: 41 140 下载量 8 浏览量 更新于2024-09-16 收藏 1KB TXT 举报
"C语言遍历文件夹里所有文件.txt" 在C语言中,遍历一个文件夹并列出其中的所有文件和子文件夹通常需要使用Windows API中的`_findfirst()`、`_findnext()`和`_findclose()`函数。这些函数在`<io.h>`头文件中定义。以下是对给定代码的详细解释: 1. **`filesearch` 函数**:这是主要的递归函数,用于遍历文件夹及其子文件夹。它接受两个参数,`path` 是当前处理的文件夹路径,`layer` 是表示当前深度的整数。 2. **`struct _finddata_t filefind`**:这是一个结构体,用于存储`_findfirst()`和`_findnext()`返回的文件或目录信息,如文件名、属性等。 3. **`string curr = path + "\\*.*"`**:创建一个字符串变量`curr`,包含当前路径和通配符`*.*`,这将匹配路径下所有类型的文件和子目录。 4. **`_findfirst(curr.c_str(), &filefind)` 和 `_findnext(handle, &filefind)`**:这两个函数分别用于获取第一个匹配项和下一个匹配项。如果`_findfirst()`返回-1,表示没有找到任何匹配项,此时函数结束。`_findnext()`在循环中持续调用,直到没有更多匹配项(由`_findnext()`返回非零值表示)。 5. **`printf("Ե--%s\n", filefind.name)`**:打印文件或目录的名字,前面的"Ե--"只是示例输出,可以按需求修改。 6. **`if (!strcmp(filefind.name, "..")) continue;`**:跳过名为`..`的条目,它代表上一级目录,通常不需要处理。 7. **`if ((_A_SUBDIR == filefind.attrib))`**:检查文件属性,如果`_A_SUBDIR`标志设置,表示是一个子目录。接着,函数会打印目录名,并递归调用自身处理子目录。 8. **`else`**:如果当前项不是目录,那么它是一个文件,函数会简单地打印出文件名。 9. **`_findclose(handle)`**:在遍历完成后,关闭查找句柄以释放资源。 10. **`main` 函数**:用户输入要遍历的目录路径,然后调用`filesearch`函数开始遍历。`system("PAUSE");`确保程序不会立即退出,让用户有机会查看输出。 这个程序仅适用于Windows环境,因为它依赖于特定于Windows的API。在其他操作系统,如Unix或Linux,你可以使用`dirent.h`库来实现类似功能。此外,为了跨平台兼容性,可以考虑使用C++标准库的`<filesystem>`(C++17及更高版本),或者Boost库中的`boost/filesystem`。