zoukankan      html  css  js  c++  java
  • opendir、readdir以及使用

    opendir,打开一个目录。

      函数原型:DIR *opendir(const char *name)

        DIR *fopendir(int fd)

      DIR是一个结构指针,是一个内部结构,保存所打开的目录信息。函数出错返回NULL

    readdir,读目录 ,<dirent.h>

      函数原型:struct dirent *readdir(DIR *dirp);  //返回一条记录项(文件或目录)

           int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);

    struct dirent
    {
        ino_t d_ino;    //此目录进入点的inode
        ff_t d_off;    //目录文件开头至此目录进入点的位移
        signed short int d_reclen;     //d_name 的长度,不包含NULL
        unsigned char d_type;     //d_name 所指的文件类型
        har d_name[256];     //文件名
    }

    递归获取文件个数

    #include <dirent.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    
    int getFileNum(char *root)
    {
        //open dir
        DIR* dir = NULL;
        dir = opendir(root);
        if(dir == NULL)
        {
            perror("opendir");
            exir(1);
        }
        
        //遍历当前打开的目录
        struct dirent* ptr = NULL;
        char path[1024] ={0};
        int total = 0;
        while(ptr = readdir(dir) != NULL)
        {
            //过滤. 和 ..
            if(strcmp(ptr->d_name, ".") == 0 || strcmp(ptr->d_name, "..") == 0)
            {
                continue;
            }
            if(ptr->d_type == DT_DIR)
            {
                //递归 读目录
                sprintf(path, "%s/%s", root, ptr->d_name);
                total += getFileNum(path);
            }
            //如果是普通文件
            if(ptr->d_type == DT_REG)
            {
                total++;
            }
        }
        //还需要关闭目录
        closedir(dir);
        return total;
    }
    
    int main(int argc, char *argv[])
    {
        if(argc < 2)
        {
            printf("./a.out dir
    ");
            exit(1);
        }
    
        int total = getFileNum(argv[1]);
        printf("%s has file numbers %d
    ", argv[1], total);
        return 0;
    }
  • 相关阅读:
    3. 23 模拟面试
    3.15 模拟面试
    C++ 浅谈virtual
    3.6 模拟面试
    为s5pv210烧录镜像
    HISI VENC 实际输出帧率控制
    live555 交叉编译移植到海思开发板
    雄迈取流
    面试官吐槽:“软件测试员就是不行!”网友:我能把你面哭了!——软件测试笔试面试题目完全汇总
    “女人~,你在玩火”一个有磁性的声音说道——常用自动化测试工具
  • 原文地址:https://www.cnblogs.com/lr1402585172/p/10490412.html
Copyright © 2011-2022 走看看