opendir、readdir以及使用

opendir、readdir以及使用opendir,打开一个目录。 函数原型:DIR *opendir(const char *name) DIR *fopendir(int fd) DIR是一个结构指针,是一个内部结构,保存所打开的目录信息。函数出错返回NULL readdir,读目录 ,<dirent.h> 函数原型:

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\n");
        exit(1);
    }

    int total = getFileNum(argv[1]);
    printf("%s has file numbers %d\n", argv[1], total);
    return 0;
}

 

今天的文章opendir、readdir以及使用分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/56237.html

(0)
编程小号编程小号
上一篇 2023-08-26 23:06
下一篇 2023-08-26

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注