在Linux中,使用opendir和readdir函数可以遍历目录及其子目录
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
int main() {
DIR *dir;
struct dirent *entry;
char path[] = "/path/to/directory"; // 替换为你要遍历的目录路径
// 打开目录
if ((dir = opendir(path)) == NULL) {
perror("Failed to open directory");
exit(EXIT_FAILURE);
}
// 遍历目录及其子目录
while ((entry = readdir(dir)) != NULL) {
// 输出当前目录项的名称
printf("Entry: %s\n", entry->d_name);
// 如果是子目录,递归遍历
if (entry->d_type == DT_DIR && strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) {
char subpath[PATH_MAX];
snprintf(subpath, sizeof(subpath), "%s/%s", path, entry->d_name);
if (chdir(subpath) == 0) {
main(); // 递归调用main函数
chdir(".."); // 返回上一级目录
} else {
perror("Failed to change directory");
}
}
}
closedir(dir);
return EXIT_SUCCESS;
}
这个示例程序首先打开指定目录,然后使用readdir函数逐个读取目录项。如果遇到子目录,程序会递归地遍历子目录。注意,这个示例程序没有处理可能的错误,例如内存不足或权限问题。在实际应用中,你需要根据具体情况添加错误处理代码。