opendir 递归读取文件
时间: 2024-09-15 07:08:04 浏览: 42
`opendir()` 函数是 C 标准库中的函数,它用于在 Unix-like 系统上打开一个目录并返回指向该目录结构的指针,以便后续遍历其内容。然而,`opendir()`本身并不支持递归读取整个目录树。为了实现递归地查找目录及其所有子目录中的文件,你需要配合使用 `readdir()` 和 `closedir()` 函数以及一些循环和条件判断。
下面是一个简单的示例,展示如何使用 `opendir()`, `readdir()`, 和 `closedir()` 来实现递归读取:
```c
#include <stdio.h>
#include <dirent.h>
void recursive_read_dir(char *dir_path) {
DIR *dp;
struct dirent *ent;
if ((dp = opendir(dir_path)) == NULL) {
perror("Error opening directory");
return;
}
while ((ent = readdir(dp))) {
char full_path[PATH_MAX];
snprintf(full_path, PATH_MAX, "%s/%s", dir_path, ent->d_name);
if (strcmp(ent->d_name, ".") != 0 && strcmp(ent->d_name, "..") != 0) { // 避免遍历 . 和 ..
if (ent->d_type == DT_DIR) {
recursive_read_dir(full_path); // 如果是目录,递归处理
} else {
printf("%s\n", full_path); // 输出非目录文件路径
}
}
}
closedir(dp);
}
int main() {
char dir_path[] = "/path/to/directory";
recursive_read_dir(dir_path);
return 0;
}
```
这个程序会打印指定目录下及其子目录的所有非隐藏文件路径。如果你需要更复杂的功能,比如统计文件、创建目录树等,可以适当修改这个基础框架。
阅读全文