linux C 列出目錄中的文件列表 包含文件的相關信息


當前目錄下

任意指定目錄


1
#include <stdio.h> 2 #include <stdlib.h> 3 #include <sys/types.h> 4 #include <sys/stat.h> 5 #include <unistd.h> 6 #include <dirent.h> 7 #include <string.h> 8 9 #define MAX_PATH 1024 10 11 //dirwalk: apply fcn to all files in dir 12 /*遞歸遍歷目錄*/ 13 void dirwalk(char *dir, void (*fcn)(char *)) 14 { 15 char name[MAX_PATH]; 16 struct dirent *dp; 17 DIR *dfd; 18 19 if ((dfd = opendir(dir)) == NULL) { 20 fprintf(stderr, "dirwalk:can not open %s\n", dir); 21 return; 22 } 23 while ((dp = readdir(dfd)) != NULL) { 24 if ((strcmp(dp->d_name, ".") == 0) || (strcmp(dp->d_name, "..") == 0)) 25 continue; //skip self and parent 26 if (strlen(dir)+strlen(dp->d_name)+2 > sizeof(name)) { 27 fprintf(stderr, "dirwalk: name %s %s too long\n", dir, dp->d_name); 28 } else { 29 sprintf(name, "%s/%s", dir, dp->d_name); 30 (*fcn)(name); 31 } 32 } 33 closedir(dfd); 34 } 35 36 //fsize: print the size and name of the file "name" 37 void fsize(char *name) 38 { 39 struct stat st_buf; 40 if (stat(name, &st_buf) != 0) { //通過文件名name獲取文件信息,並保存在st_buf所指的結構體stat中 41 fprintf(stderr, "fsize:can not access to %s\n", name); //返回值:執行成功則返回0,失敗返回-1,錯誤代碼存於errno 42 return; 43 } 44 if ((st_buf.st_mode & S_IFMT) == S_IFDIR) { 45 dirwalk(name, fsize); 46 } 47 printf("%8ld %s\n", st_buf.st_size, name); 48 } 49 50 int main(int argc, char *argv[]) 51 { 52 if (argc == 1) //default: current dir 53 fsize("."); 54 else 55 while (--argc > 0) 56 fsize(*++argv); 57 return 0; 58 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM