在 CentOS(Linux) 里,readdir() 本身只能得到文件名和文件类型,不能直接拿到文件大小。
要获取文件大小,通常有两种做法:
readdir() 返回 struct dirent,里面只有文件名;
再用 stat() 或 lstat() 获取文件详细信息。
#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
#include <string.h>
int main() {
DIR *dir = opendir(".");
if (!dir) {
perror("opendir");
return 1;
}
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
struct stat st;
if (stat(entry->d_name, &st) == -1) {
perror("stat");
continue;
}
printf("%s size: %ld bytes\n", entry->d_name, st.st_size);
}
closedir(dir);
return 0;
}
st.st_size → 文件大小(字节)lstat() 看链接本身大小readdir() 只能遍历目录entry->d_type == DT_REG // 普通文件
⚠️ d_type 不包含文件大小
如果你是写脚本而不是 C 程序:
ls -l
或
find . -type f -printf "%s %p\n"
| 需求 | 方法 |
|---|---|
| 只遍历目录 | readdir() |
| 获取文件大小 | readdir() + stat() |
| 快速判断类型 | d_type |
如果你是在 C / C++ / Python / Shell 里用,告诉我语言,我可以给更贴合的示例。