zoukankan      html  css  js  c++  java
  • 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 ", 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 ", 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 ", 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 ", 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 }
  • 相关阅读:
    python汉诺塔
    圆周率计算
    PIL: 建立一个GIF图
    Jieba库使用和好玩的词云
    Turtle库的建立——汉诺塔
    计算pi的精度+进度条显示
    Python——我所学习的turtle函数库
    Python——教你画朵太阳花
    Python常用模块re的使用
    正则表达式字符组/元字符/量词
  • 原文地址:https://www.cnblogs.com/torres-9/p/5948635.html
Copyright © 2011-2022 走看看