您的位置:首页 > 运维架构 > Linux

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

2014-01-04 13:15 453 查看
本文:/article/4813948.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)等。

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <unistd.h>
int readFileList(char *basePath)
{
DIR *dir;
struct dirent *ptr;
char base[1000];

if ((dir=opendir(basePath)) == NULL)
{
perror("Open dir error...");
exit(1);
}

while ((ptr=readdir(dir)) != NULL)
{
if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"..")==0)    ///current dir OR parrent dir
continue;
else if(ptr->d_type == 8)    ///file
printf("d_name:%s/%s\n",basePath,ptr->d_name);
else if(ptr->d_type == 10)    ///link file
printf("d_name:%s/%s\n",basePath,ptr->d_name);
else if(ptr->d_type == 4)    ///dir
{
memset(base,'\0',sizeof(base));
strcpy(base,basePath);
strcat(base,"/");
strcat(base,ptr->d_name);
readFileList(base);
}
}
closedir(dir);
return 1;
}

int main(void)
{
DIR *dir;
char basePath[1000];

///get the current absoulte path
memset(basePath,'\0',sizeof(basePath));
getcwd(basePath, 999);
printf("the current dir is : %s\n",basePath);

///get the file list
memset(basePath,'\0',sizeof(basePath));
strcpy(basePath,"./XL");
readFileList(basePath);
return 0;
}


执行输出 :

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: