在 Debian(以及一般的 Linux/glibc 环境)中,scandir 通常比 readdir 更快,但要看使用场景。
readdir(配合 opendir)更快scandir 更快、更方便readdiropendir → 多次 readdir → closedirscandiralphasort 或自定义函数排序struct dirent ** 数组| 场景 | 推荐 |
|---|---|
| 几万以上文件,仅遍历 | readdir |
需要 ls 风格排序 |
scandir |
| 需要按规则过滤 | scandir + filter |
| 目录极小 | 两者差异可忽略 |
DIR *d = opendir(path);
struct dirent *e;
while ((e = readdir(d))) {
// 处理 e->d_name
}
closedir(d);
struct dirent **namelist;
int n = scandir(path, &namelist, NULL, alphasort);
for (int i = 0; i < n; i++) {
// namelist[i]->d_name
free(namelist[i]);
}
free(namelist);
scandir 更快,大目录 readdir 更稳scandir 完胜readdir + 手动处理更可靠如果你有具体使用场景(比如“百万文件目录”“只统计数量”),我可以给你更精确的建议。