2026-10-30 12:08:12
使用opendir和readdir读取目录内容的步骤如下:
包含必要的头文件需包含dirent.h(提供目录操作函数)和stdio.h(标准输入输出),示例:
#include <dirent.h>#include <stdio.h>打开目标目录
使用opendir函数打开目录,返回DIR*指针。
检查返回值是否为NULL(打开失败时返回NULL),失败时通过perror输出错误信息并处理。
示例代码:DIR *dir = opendir("path/to/directory"); // 替换为实际路径if (dir == NULL) { perror("opendir failed"); return 1; // 或其他错误处理}
循环读取目录条目
使用readdir函数逐个读取目录中的条目,返回struct dirent*指针。
循环条件为readdir返回值不为NULL,每次迭代获取一个条目。
通过entry->d_name访问条目名称(包含.和..,需根据需求过滤)。
示例代码:struct dirent *entry;while ((entry = readdir(dir)) != NULL) { printf("Found: %sn", entry->d_name); // 打印条目名称}
关闭目录并释放资源
操作完成后,调用closedir关闭目录,避免资源泄漏。
示例代码:closedir(dir);
完整示例代码:以下代码演示如何列出指定目录下的所有文件和子目录(需替换path/to/directory为实际路径):
#include <dirent.h>#include <stdio.h>#include <stdlib.h> // 提供EXIT_FAILURE和EXIT_SUCCESSint main() { DIR *dir; struct dirent *entry; const char *dir_path = "path/to/directory"; // 替换为实际路径 // 打开目录 dir = opendir(dir_path); if (dir == NULL) { perror("opendir failed"); return EXIT_FAILURE; } // 读取目录内容 while ((entry = readdir(dir)) != NULL) { // 过滤当前目录和父目录(可选) if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) { continue; } printf("%sn", entry->d_name); // 打印条目名称 } // 关闭目录 closedir(dir); return EXIT_SUCCESS;}关键注意事项:
通过以上步骤,可安全、高效地读取目录内容。