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

Posted 极客先锋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux C 读取文件夹下所有文件(包括子文件夹)的文件名(转)相关的知识,希望对你有一定的参考价值。

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

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

其中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;
}

执行输出 :

 

以上是关于Linux C 读取文件夹下所有文件(包括子文件夹)的文件名(转)的主要内容,如果未能解决你的问题,请参考以下文章

请问linux下,gcc编译程序的过程(从读取源文件到制作可执行程序中间所有过程,越详细越好)

linux 列出home文件夹的大小 包括所有子文件夹

c#遍历一个文件夹下的所有文件包括子文件夹

请我如何c语言遍历文件夹

请我如何c语言遍历文件夹

批量移动当前目录下的所有子文件夹?