在 Debian(本质就是 Linux 的 readdir)里,readdir 本身不能直接拿到文件大小。
readdir() 返回的是 struct dirent,里面只有:
d_named_inod_type(部分文件系统支持)没有文件大小字段。
要获取文件大小,通常是:
readdir + stat / lstat#include <dirent.h>
#include <sys/stat.h>
#include <stdio.h>
DIR *dir = opendir(".");
struct dirent *ent;
struct stat st;
while ((ent = readdir(dir))) {
if (stat(ent->d_name, &st) == 0) {
printf("%s size=%ld\n", ent->d_name, st.st_size);
}
}
closedir(dir);
stat():跟随符号链接lstat():不跟随符号链接getdents(底层,不推荐日常用)readdir 底层调用 getdents64,同样不含文件大小,仍需要 stat。
| 方法 | 能拿大小吗 |
|---|---|
readdir |
❌ |
readdir + stat |
✅ |
getdents |
❌ |
如果你是在写 C / C++ / Shell / Python,我可以给你对应示例。