温馨提示×

centos readdir怎么获取文件大小

小樊
43
2026-10-20 16:49:40
栏目: 智能运维

在 CentOS(Linux) 里,readdir() 本身只能得到文件名和文件类型,不能直接拿到文件大小。
要获取文件大小,通常有两种做法:


方法一:readdir + stat(最常用)

readdir() 返回 struct dirent,里面只有文件名;
再用 stat() 或 lstat() 获取文件详细信息。

示例代码(C语言)

#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() 只能遍历目录

方法二:使用 d_type 判断类型(不能拿大小)

entry->d_type == DT_REG  // 普通文件

⚠️ d_type 不包含文件大小


方法三:直接用命令(非C)

如果你是写脚本而不是 C 程序:

ls -l

或

find . -type f -printf "%s %p\n"

总结

需求 方法
只遍历目录 readdir()
获取文件大小 readdir() + stat()
快速判断类型 d_type

如果你是在 C / C++ / Python / Shell 里用,告诉我语言,我可以给更贴合的示例。

0 踩