• 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 }
  • 相关阅读:
    OkHttp的基本使用方法
    C#中Dictionary小记
    SQL Server表的数据量大小查询
    基于.NET平台常用的框架整理
    JQuery中ajax的相关方法总结
    JQuery中的工具函数总结
    Asp.net MVC 中Controller返回值类型ActionResult
    Plupload文件上传组件使用API
    HTTP 方法:GET 对比 POST
    C#使用简单邮件传输协议(SMTP)发送邮件
  • 原文地址:https://www.cnblogs.com/torres-9/p/5948635.html
Copyright © 2020-2023  润新知