溫馨提示×

如何用readdir獲取文件大小

小樊
48
2025-08-26 13:41:47
欄目: 編程語言

在C語言中,使用readdir函數可以遍歷目錄中的文件和子目錄。要獲取文件的大小,你需要結合stat函數來獲取文件的詳細信息。以下是一個簡單的示例,展示了如何使用readdirstat來獲取目錄中每個文件的大?。?/p>

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>
#include <string.h>

int main() {
    DIR *dir;
    struct dirent *entry;
    struct stat file_stat;

    // 打開目錄
    dir = opendir(".");
    if (dir == NULL) {
        perror("opendir");
        return EXIT_FAILURE;
    }

    // 遍歷目錄中的條目
    while ((entry = readdir(dir)) != NULL) {
        // 跳過當前目錄和上級目錄的特殊條目
        if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
            continue;
        }

        // 構建文件的完整路徑
        char path[PATH_MAX];
        snprintf(path, sizeof(path), "./%s", entry->d_name);

        // 獲取文件狀態
        if (stat(path, &file_stat) == -1) {
            perror("stat");
            continue;
        }

        // 檢查是否是常規文件
        if (S_ISREG(file_stat.st_mode)) {
            // 輸出文件名和大小
            printf("File: %s, Size: %ld bytes\n", entry->d_name, file_stat.st_size);
        }
    }

    // 關閉目錄
    closedir(dir);

    return EXIT_SUCCESS;
}

在這個示例中,我們首先使用opendir函數打開當前目錄(.)。然后,我們使用readdir函數遍歷目錄中的每個條目。對于每個條目,我們使用snprintf構建文件的完整路徑,并使用stat函數獲取文件的狀態信息。stat函數返回的信息存儲在file_stat結構體中。

我們使用S_ISREG宏來檢查文件是否是常規文件(而不是目錄或其他類型的文件)。如果是常規文件,我們可以從file_stat.st_size獲取文件的大小,并將其打印出來。

最后,我們使用closedir函數關閉目錄。

請注意,這個示例假設你有足夠的權限來讀取目錄中的文件,并且你的系統支持POSIX標準的文件和目錄操作函數。如果你在使用其他編程語言,如Python或Java,獲取文件大小的方法會有所不同。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女