在 Debian 系統中,readdir
是一個用于讀取目錄內容的系統調用。以下是一些與 readdir
相關的實用技巧:
使用 opendir
和 readdir
函數:
opendir()
打開一個目錄。readdir()
來讀取目錄中的每個條目。closedir()
關閉目錄。#include <dirent.h>
#include <stdio.h>
int main() {
DIR *dir;
struct dirent *entry;
dir = opendir(".");
if (dir == NULL) {
perror("opendir");
return 1;
}
while ((entry = readdir(dir)) != NULL) {
printf("%s\n", entry->d_name);
}
closedir(dir);
return 0;
}
過濾特定類型的文件:
entry->d_type
來檢查文件類型,并根據需要過濾文件。if (entry->d_type == DT_REG) {
printf("Regular file: %s\n", entry->d_name);
} else if (entry->d_type == DT_DIR) {
printf("Directory: %s\n", entry->d_name);
}
處理隱藏文件:
readdir()
會返回包括隱藏文件(以點開頭的文件)在內的所有文件。if (entry->d_name[0] != '.') {
printf("%s\n", entry->d_name);
}
按特定順序排序:
readdir()
返回的文件順序是不確定的,如果需要按特定順序(如字母順序)處理文件,可以在讀取后對文件名進行排序。// 假設 file_names 是一個包含所有文件名的數組
qsort(file_names, num_files, sizeof(file_names[0]), strcmp);
處理符號鏈接:
lstat()
而不是 stat()
來檢查文件是否為符號鏈接,并根據需要處理。struct stat statbuf;
if (lstat(entry->d_name, &statbuf) == -1) {
perror("lstat");
continue;
}
if (S_ISLNK(statbuf.st_mode)) {
printf("Symbolic link: %s\n", entry->d_name);
}
獲取文件的詳細信息:
stat()
函數可以獲取文件的詳細信息,如大小、修改時間等。struct stat statbuf;
if (stat(entry->d_name, &statbuf) == -1) {
perror("stat");
continue;
}
printf("Size: %ld\n", statbuf.st_size);
printf("Last modified: %s", ctime(&statbuf.st_mtime));
通過這些技巧,你可以更靈活地使用 readdir
來處理目錄內容。