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

本文: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 }
复制代码

执行输出 :


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

报表工具实现单据套打

【摘要】 单据套打再也不用手动测量&#xff0c;反复调试了&#xff0c;报表工具实现单据套打&#xff0c;去乾学院看个究竟&#xff1a;报表工具实现单据套打!实际项目开发中&#xff0c;很多情况会涉及到单据的打印。即在一张印刷好的空白单据上&#xff0c;准确无误地打印上…

每隔10秒钟打印一个“Helloworld”

/*** 每隔10秒钟打印一个“Helloworld”*/ public class Test03 {public static void main(String[] args) throws InterruptedException {ThreadImp threadImp new ThreadImp();Thread thread1 new Thread(threadImp);thread1.start();} }class ThreadImp extends Thread {p…

C++ STL 优先队列

//优先队列//Priority_queue //STL#include<iostream>#include<cstdio>#include<cstdlib>#include<queue>using namespace std;struct cmp{ bool operator() (const int a,const int b) const{//用const定义的a,b是包裹着变量外衣的常数&#xff0c;不…

GDB调试core文件样例(如何定位Segment fault)

core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (Linux中如果内存越界会收到SIGSEGV信号&#xff0c;然后就会core dump) 在程序运行的过程中&#xff0c;有的时候我们会遇到Segment fa…

管理信息系统的开发与管理

{% extendsmuban.html %} {% block head %}输入{% endblock %} {% block main %} <div><div class"form-group"><label for"question">标题</label><textarea class"form-control" cols"50" rows"2&q…

python11-28笔记(1.6-1.7)

1.6 多类型传值和冗余参数多类型传值&#xff1a;比如def fun(x,y)&#xff0c;定义2个形参定义一个元组t(1,2),如果把元组当做实参传入到函数中&#xff0c;会报错 如何将元组当做不同类型的参数传入到函数中fun(t) 代表传入的是元组或者这样调用fun((1,2))注意实参的个数要和…

session机制详解以及session的相关应用

session是web开发里一个重要的概念&#xff0c;在大多数web应用里session都是被当做现成的东西&#xff0c;拿来就直接用&#xff0c;但是一些复杂的web应用里能拿来用的session已经满足不了实际的需求&#xff0c;当碰到这样的情况时候我们需要更加深入的理解session的机制&am…

(转)Shell中获取字符串长度的七种方法

Shell中获取字符串长度的七种方法 原文&#xff1a;http://blog.csdn.net/jerry_1126/article/details/51835119 求字符串操作在shell脚本中很常用&#xff0c;下面归纳、汇总了求字符串的几种可能方法: 【方法一】:利用${#str}来获取字符串的长度 【方法二】:利用awk的length方…

linux下用core和gdb查询出现段错误的地方

有些时候我们在一段C代码的时候&#xff0c;由于对一个非法内存进行了操作&#xff0c;在程序运行的过程中&#xff0c;出现了"段错误"。呵呵&#xff0c;这种问题我想很多人会经常遇到。遇到这种问题是非常无语的&#xff0c;只是提示了"段错误"&#xff…

第一篇-Html标签中head标签,body标签中input系列,textarea和select标签

第十四周课程&#xff08;1-12章节&#xff09; HTML 裸体 CSS 穿华丽衣服 Javascript 动起来 一 HTML &#xff08;20个标签&#xff09; 1.我们的浏览器是socket客户端 2.一套规则&#xff0c;浏览器认识的规则 3.开发者&#xff1a; 学习html规则 开发后台程序&#xff1a…

opencv3.2.0 Cmake 3.8.0 + tdm-gcc-5.1.0-3

实测 tdm-gcc-5.1.0-3 tdm32-1 32位版本无法正确编译Opencv 3.2.0 会遇到诸多编译问题 解决办法 使用tdm-gcc-5.1.0-2 tdm64-1 64位版本转载于:https://www.cnblogs.com/fundou/p/6710209.html

什么是商品属性

一、什么是商品属性&#xff1a; Definition of Product Attributes A product attribute is a characteristic that defines a particular product and will affect a consumers purchase decision. Product attributes can be tangible (or physical in nature) or intangibl…

linux用户管理(1)----创建用户(adduser和useradd)和删除用户(userdel)

arm linux的系统用户管理&#xff1a; 1、删除root用户&#xff1a;deluser root2、删除tt用户:deluser tt3、建立root用户&#xff1a;adduser root4、修改用户密码&#xff1a;登录相应的用户后&#xff0c;用passwd来修改密码4、linux用户和密码的管理&#xff08;ftp&#…

前端性能优化之图像优化原理

前端性能优化中&#xff0c;图像的优化是非常重要的一环&#xff0c;为什么要说图像的优化呢&#xff0c;而不是我们常见的图片优化&#xff1f;因为这里的图像包括矢量图和位图&#xff0c;我们常说的图片优化是指位图的优化。这篇文章转载至奇舞周刊&#xff0c;大佬总结的非…

Lua开发学习4-普通循环和迭代器循环

说句实话&#xff0c;每当看到Lua代码&#xff0c;我都感觉是半个SQL代码&#xff0c;写起来还是感觉有点恐怖。 while循环&#xff1a; 与C#的while循环类似&#xff0c;没有什么好说的&#xff1b; --------Lua的while循环 while(condition)dostatementsend For循环 exp1为起…

什么是js的严格模式

设立严格模式的原因&#xff1a; - 消除Javascript语法的一些不合理、不严谨之处&#xff0c;减少一些怪异行为; - 消除代码运行的一些不安全之处&#xff0c;保证代码运行的安全&#xff1b; - 提高编译器效率&#xff0c;增加运行速度&#xff1b; - 为未来新版本的Javascrip…

Linux驱动设计ioctl函数的cmd参数不能为2

Linux驱动程序设计的时候偶然发现的ioctl()函数的cmd参数不能为2&#xff0c;如果为2,ioctl()函数返回-1&#xff0c;网上说就是这样的&#xff0c;正常&#xff0c;不知道为什么&#xff0c;stack overflow上有一个外国学友的建议&#xff1a; “In general, you want to comp…

代码解说Android Scroller、VelocityTracker

在编写自己定义滑动控件时经常会用到Android触摸机制和Scroller及VelocityTracker。Android Touch系统简单介绍&#xff08;二&#xff09;:实例具体解释onInterceptTouchEvent与onTouchEvent的调用过程对Android触摸机制须要用到的函数进行了具体的解释。本文主要介绍两个重要…

Effective_STL 学习笔记(四十四) 尽量使用成员函数代替同名的算法

有些容器拥有和 STL 算法同名的成员函数。 关联容器提供了 count、find、lower_bound、upper_bound 和 euqal_range list 提供了 remove、remove_if、unique、merge 和 reverse 大多数时候应该用成员函数代替手写算法&#xff0c;这样做的两个理由&#xff1a; 比起算法&#x…

(NFS移植到arm上)编译portmap和nfs-utils

为了在播放机上实现NFS服务器的功能&#xff0c;我们已经在uClibc中打开了完整RPC支持&#xff0c;并且在新编译的内核中打开了NFS服务器支持。此外还有两个软件包也是提供NFS服务所必需的&#xff1a;portmap和nfs-utils。portmap为RPC程序提供端口映射服务&#xff0c;nfs-ut…