如何遍历目录使用readdir
在C语言的实际开发中,遍历目录并读取文件内容算是家常便饭了。你可能会想,这事儿到底有多简单?其实,只要用上dirent.h这个标准库,几行代码就能搞定。下面这个例子,就是用readdir函数遍历当前目录的经典写法——先过一眼,后面再细聊细节。 #include #include #include #
在C语言的实际开发中,遍历目录并读取文件内容算是家常便饭了。你可能会想,这事儿到底有多简单?其实,只要用上dirent.h这个标准库,几行代码就能搞定。下面这个例子,就是用readdir函数遍历当前目录的经典写法——先过一眼,后面再细聊细节。

#include
#include
#include
#include
int main() {
DIR *dir;
struct dirent *entry;
// 打开当前目录
dir = opendir(".");
if (dir == NULL) {
perror("opendir");
return EXIT_FAILURE;
}
// 遍历目录中的每个条目
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
// 关闭目录
closedir(dir);
return EXIT_SUCCESS;
}
代码说明
先拆开看看每个函数都在干什么:
opendir:它的任务就是打开一个目录流,返回一个指向DIR结构的指针。如果目录打不开——比如路径不存在或权限不够——它就返回NULL,这时候一定要检查错误。readdir:从目录流里一次读一个条目。每次调用它会返回一个指向dirent结构的指针,里面藏着文件名之类的信息。如果读到尽头了,它就返回NULL——这也是循环退出的条件。closedir:用完了得关上,不然会有资源泄漏。entry->d_name:这个字段就是目录项的名字,比如文件或子目录的名字。
注意事项
顺手提几个容易踩的坑:
readdir返回的dirent结构里其实还藏着其他信息,比如文件类型(entry->d_type)、文件大小等,不过这些字段在不同系统上不一定全有,用之前最好查一下文档。- 如果需要递归遍历子目录,那就在遇到子目录时再次调用
opendir和readdir套一层循环,实现起来并不复杂。 - 实际项目中经常需要对文件列表做过滤,比如只列出
.txt或.c文件,这时候可以结合strstr或正则表达式来处理。
上面这个例子只是简单地把当前目录下所有文件和子目录的名字打印出来。根据你的实际需求——比如读取文件内容、统计大小、或者做更复杂的操作——都可以在这个骨架基础上扩展。说到底,dirent.h这套接口就是C语言里与文件系统打交道的基础工具,掌握它,很多日常任务就能信手拈来。
IntelliJ IDEA 是 JetBrains 推出的专业集成开发环境,重点服务于 Java、Kotlin 与 JVM 项目开发。软件集成代码补全、静态检查、重构、调试、测试、版本控制及构建工具,并可借助插件扩展语言和框架支持。
JetBrains PyCharm 是面向 Python 开发者的集成开发环境,提供智能补全、代码检查、重构、调试、测试、版本控制及虚拟环境管理功能。Mac 版兼容 Intel 与 Apple 芯片,核心功能可免费使用。
JetBrains WebStorm 是面向 JavaScript、TypeScript 和现代 Web 技术的专业集成开发环境,可智能理解项目结构,提供代码补全、重构、错误检查、运行调试、测试及 Git 工具。
JetBrains IntelliJ IDEA 是以 Java、Kotlin 和 JVM 项目为核心的专业集成开发环境,提供智能补全、代码检查、安全重构、调试、测试、版本控制及构建工具集成。统一发行版的核心功能可免费用于商业和非商业项目,
PhpStorm 是 JetBrains 面向 PHP 与现代 Web 开发打造的专业集成开发环境,提供代码补全、静态检查、重构、调试、测试、数据库、版本控制及前端语言支持。Windows 用户可直接下载安装程序,
PyCharm 是 JetBrains 推出的 Python 集成开发环境,提供智能代码补全、错误检查、重构、调试、测试、Git、终端及 Jupyter Notebook 支持。统一版安装后可体验 30 天 Pro 功能,





