zoukankan      html  css  js  c++  java
  • Linux C 读取文件夹下所有文件(包括子文件夹)的文件名

    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 ",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,"./");
    readFileList(basePath);
    return 0;
    }

  • 相关阅读:
    硬件——STM32 , SN74HC573锁存器
    【模拟】【杂题】jzoj 6345. 【NOIP2019模拟2019.9.8】ZYB建围墙
    归并排序求逆序对
    归并排序求逆序对
    hdu 4135
    hdu 4135
    牛客小白月赛5 A-无关(relationship)
    牛客小白月赛5 A-无关(relationship)
    HDU4027:Can you answer these queries?
    HDU4027:Can you answer these queries?
  • 原文地址:https://www.cnblogs.com/poonpan/p/8630797.html
Copyright © 2011-2022 走看看