温馨提示×

debian readdir能获文件大小吗

小樊
47
2026-09-16 12:47:01
栏目: 智能运维

在 Debian(本质就是 Linux 的 readdir)里,readdir 本身不能直接拿到文件大小

原因

readdir() 返回的是 struct dirent,里面只有:

  • 文件名 d_name
  • inode 号 d_ino
  • 文件类型 d_type(部分文件系统支持)
  • 等等

没有文件大小字段


正确做法

要获取文件大小,通常是:

1️⃣ 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():不跟随符号链接

2️⃣ 使用 getdents(底层,不推荐日常用)

readdir 底层调用 getdents64同样不含文件大小,仍需要 stat


3️⃣ 想要“一次拿到大小”?

  • 用户态:做不到
  • 文件系统层(如某些数据库文件系统)才可能

总结

方法 能拿大小吗
readdir
readdir + stat
getdents

如果你是在写 C / C++ / Shell / Python,我可以给你对应示例。

0