• 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
    ",basePath,ptr->d_name);
            else if(ptr->d_type == 10)    ///link file
                printf("d_name:%s/%s
    ",basePath,ptr->d_name);
            else if(ptr->d_type == 4)    ///dir
            {
                memset(base,'',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,'',sizeof(basePath));
        getcwd(basePath, 999);
        printf("the current dir is : %s
    ",basePath);
    
        //get the file list
        //memset(basePath,'',sizeof(basePath));
        //strcpy(basePath,"./XL");
        readFileList(basePath);
        return 0;
    }

    执行输出 :

  • 相关阅读:
    hdu-3001 三进制状态压缩+dp
    最长公共子序列(LCS)
    矩阵最优路线DP
    CF-721C DAG图拓扑排序+费用DP
    拓扑排序
    BFS+二进制状态压缩 hdu-1429
    DAG最长路问题 hdu-1224
    并查集-解决区间和纠错问题 hdu-3038
    hdu 4972 根据每轮篮球赛分差求结果
    hdu 1116 欧拉回路+并查集
  • 原文地址:https://www.cnblogs.com/jikexianfeng/p/7084504.html
Copyright © 2020-2023  润新知