(1) 頭文件 #include <dirent.h> (2) 函數定義 int scandir(const char *dir,struct dirent **namelist,int (*filter)(const void *b), int ( * compare )( const struct dirent **, const struct dirent ** ) ); int alphasort(const void *a, const void *b); int versionsort(const void *a, const void *b); (3) 使用說明 函數scandir掃描dir目錄下以及dir子目錄下滿足filter過濾模式的文件,返回的結果是compare函數經過排序的,並保存在 namelist中。注意namelist是通過malloc動態分配內存的,所以在使用時要注意釋放內存。alphasort和versionsort 是使用到的兩種排序的函數。 當函數成功執行時返回找到匹配模式文件的個數,如果失敗將返回-1。 (4) 使用示例 /* scandir函數 */ #include <stdio.h> #include <dirent.h> int customFilter(const struct dirent *pDir) { if (strncmp("test", pDir->d_name, 4) == 0 && pDir->d_type & 0x04 && strcmp(pDir->d_name, ".") && strcmp(pDir->d_name, "..")) { return 1; } return 0; } int main() { struct dirent **namelist; int n; int i; n = scandir(".", &namelist, customFilter, alphasort); if (n < 0) { perror("scandir"); } else { for (i = 0; i < n; i++) { printf("%s\n", namelist[i]->d_name); free(namelist[i]); } free(namelist); } }