设为首页 加入收藏

TOP

C语言在Linux下递归遍历文件夹中的文件
2014-11-24 02:01:52 来源: 作者: 【 】 浏览:1
Tags:语言 Linux 文件夹 文件

C语言在Linux下递归遍历文件夹中的文件


/******************************************
* 作者: chengshuguang
* 版本: 1.0
* 时间: 2013年11月
* 程序说明:
* 输入:./a.out 比如:列出home下的所有
* 文件,只需要输入./a.out /home
******************************************/
#include
#include
#include
#include
#include
#include
#include


#define MAX_PATH_LEN 512


int count =0;
char dirPath[MAX_PATH_LEN];


void listAllFiles(char *dirname)
{
assert(dirname != NULL);

char path[512];
struct dirent *filename;//readdir 的返回类型
DIR *dir;//血的教训阿,不要随便把变量就设成全局变量。。。。

dir = opendir(dirname);
if(dir == NULL)
{
printf("open dir %s error!\n",dirname);
exit(1);
}

while((filename = readdir(dir)) != NULL)
{
//目录结构下面问什么会有两个.和..的目录? 跳过着两个目录
if(!strcmp(filename->d_name,".")||!strcmp(filename->d_name,".."))
continue;

//非常好用的一个函数,比什么字符串拼接什么的来的快的多
sprintf(path,"%s/%s",dirname,filename->d_name);

struct stat s;
lstat(path,&s);

if(S_ISDIR(s.st_mode))
{
listAllFiles(path);//递归调用
}
else
{
printf("%d. %s\n",++count,filename->d_name);
}
}
closedir(dir);
}



int main(int argc, char **argv)
{


if(argc != 2)
{
printf("one dir required!(for eample: ./a.out /home/myFolder)\n");
exit(1);
}
strcpy(dirPath,argv[1]);
listAllFiles(dirPath);
printf("total files:%d\n",count);
return 0;
}


相关阅读:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇用socketpair()进行进程间的全双.. 下一篇Android Touch事件的分发过程

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: