在 Ubuntu(Linux)下使用 C 语言通过 opendir / readdir 遍历目录时,**判断“结束”**主要依赖 readdir 的返回值。
#include <dirent.h>
#include <stdio.h>
int main() {
DIR *dir = opendir(".");
if (dir == NULL) {
perror("opendir");
return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
readdir 返回 NULLreaddir() 每调用一次,返回一个目录项NULLwhile ((entry = readdir(dir)) != NULL) {
// 处理文件
}
// 到这里说明目录已经遍历完
如果你想区分:
可以使用 errno:
#include <errno.h>
errno = 0;
entry = readdir(dir);
if (entry == NULL) {
if (errno != 0) {
perror("readdir");
} else {
// 正常结束
}
}
opendir 判断是否结束opendir 只负责“打开目录”NULL 表示打开失败,不是结束closedir 判断closedir 只是关闭目录| 函数 | 用途 | 结束判断 |
|---|---|---|
opendir |
打开目录 | 返回 NULL = 打开失败 |
readdir |
读取目录项 | 返回 NULL = 结束(或出错) |
closedir |
关闭目录 | 不用于判断结束 |
如果你是在 C++ / Python / shell 或想用 readdir_r / getdents,也可以告诉我。