专栏首页科技分享Linux C 读取文件夹下所有文件(包括子文件夹)的文件名【转】

Linux C 读取文件夹下所有文件(包括子文件夹)的文件名【转】

转自:https://www.cnblogs.com/xudong-bupt/p/3504442.html

本文:http://www.cnblogs.com/xudong-bupt/p/3504442.html

Linux C 下面读取文件夹要用到结构体struct dirent,在头#include <dirent.h>中,如下:

#include <dirent.h>
struct dirent
{
   long d_ino; /* inode number 索引节点号 */
   off_t d_off; /* offset to this dirent 在目录文件中的偏移 */
   unsigned short d_reclen; /* length of this d_name 文件名长 */
   unsigned char d_type; /* the type of d_name 文件类型 */
   char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最长255字符 */
}

其中d_type表明该文件的类型:文件(8)、目录(4)、链接文件(10)等。

下面程序,递归读取某文件夹及其子文件夹下所有文件名:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <dirent.h>
 5 #include <unistd.h>
 6 int readFileList(char *basePath)
 7 {
 8     DIR *dir;
 9     struct dirent *ptr;
10     char base[1000];
11 
12     if ((dir=opendir(basePath)) == NULL)
13     {
14         perror("Open dir error...");
15         exit(1);
16     }
17 
18     while ((ptr=readdir(dir)) != NULL)
19     {
20         if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"..")==0)    ///current dir OR parrent dir
21             continue;
22         else if(ptr->d_type == 8)    ///file
23             printf("d_name:%s/%s\n",basePath,ptr->d_name);
24         else if(ptr->d_type == 10)    ///link file
25             printf("d_name:%s/%s\n",basePath,ptr->d_name);
26         else if(ptr->d_type == 4)    ///dir
27         {
28             memset(base,'\0',sizeof(base));
29             strcpy(base,basePath);
30             strcat(base,"/");
31             strcat(base,ptr->d_name);
32             readFileList(base);
33         }
34     }
35     closedir(dir);
36     return 1;
37 }
38 
39 int main(void)
40 {
41     DIR *dir;
42     char basePath[1000];
43 
44     ///get the current absoulte path
45     memset(basePath,'\0',sizeof(basePath));
46     getcwd(basePath, 999);
47     printf("the current dir is : %s\n",basePath);
48 
49     ///get the file list
50     memset(basePath,'\0',sizeof(basePath));
51     strcpy(basePath,"./XL");
52     readFileList(basePath);
53     return 0;
54 }

执行输出 :

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 从基本理解到深入探究 Linux kernel 通知链(notifier chain)【转】

    转自:https://blog.csdn.net/u014134180/article/details/86563754

    用户3033338
  • SHA1算法原理【转】

    转自:https://www.cnblogs.com/scu-cjx/p/6878853.html

    用户3033338
  • Linux下用火焰图进行性能分析【转】

    转自:https://blog.csdn.net/gatieme/article/details/78885908

    用户3033338
  • Electrum比特币钱包的Python代码分析

    如果你仍然未对Python语言的强大功能感到惊讶,那么在这部分我们将学习如何在python中开发比特币地址或钱包。我只是想说与你的计算机通信是多么容易,如果你通...

    笔阁
  • 比特币和区块链(0):骗局还是改变命运的科技

    0 新年伊始,接触了几个我很尊敬的大牛,都和飞总说,要去了解一下比特币和区块链技术。不然的话飞总就out了,不懂黑科技,也会错失改变命运的机会。于是我就吭哧吭哧...

    用户1564362
  • 比特币和区块链(0):骗局还是改变命运的科技

    如果说2017年什么东西最红火的话,那当然是人工智能。如果说还有什么东西和它一样红火的话,那么比特币,区块链和各种代币无疑是红红火火的。媲美IPO的ICO更是韭...

    用户1564362
  • AI通过了艺术创作图灵测试,你根本分不出来作者是不是人

    安妮 千平 编译整理 量子位 出品 | 公众号 QbitAI 各位亲爱的文化圈权威,今年不用再看画了:近年来最大的艺术成就已经发生了。 这项艺术成就的诞生地,不...

    量子位
  • JavaScrpit判断横竖屏

    Jackson0714
  • Web前端学习 第2章 网页重构17 媒体查询

    这个是bootstrap的中文文档网站,大家可以用chrome浏览器来模拟手机端的浏览效果,可以看到手机端和电脑端访问同一个网页时,都能获得比较好的浏览体验。也...

    学习猿地
  • 【融职培训】Web前端学习 第2章 网页重构17 媒体查询

    这个是bootstrap的中文文档网站,大家可以用chrome浏览器来模拟手机端的浏览效果,可以看到手机端和电脑端访问同一个网页时,都能获得比较好的浏览体验。也...

    学习猿地

扫码关注云+社区

领取腾讯云代金券