在C語言中,使用readdir
函數可以遍歷目錄中的文件和子目錄。要獲取文件的大小,你需要結合stat
函數來獲取文件的詳細信息。以下是一個簡單的示例,展示了如何使用readdir
和stat
來獲取目錄中每個文件的大?。?/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,獲取文件大小的方法會有所不同。