计算C中嵌套目录中文件的块大小

Posted

技术标签:

【中文标题】计算C中嵌套目录中文件的块大小【英文标题】:Calculate blocksize of files in nested directories in C 【发布时间】:2021-10-14 07:16:43 【问题描述】:

我一直在尝试以递归方式计算嵌套文件夹中文件的总块大小。我的代码设法获取第一个文件夹中文件的块大小,但无法读取嵌套在当前文件夹中的文件夹中的文件大小。嵌套文件夹中的文件返回的块大小为零。为什么会这样?

int scanDir (char *fstring)

    char new_dirname[180] =  0 ;
    int total_size = 0;

    DIR *dir = opendir(fstring);
    if(dir == NULL) 
        perror("Could not open file\n");
        exit(EXIT_FAILURE);
    

    struct dirent *filenum;
    filenum = readdir(dir);
    while(filenum != NULL) 

        if (strcmp(filenum->d_name, ".") != 0 && strcmp(filenum->d_name, "..") != 0) 

            //Check if file is not a directory
            if (filenum->d_type != DT_DIR ) 

                //Get the size of the file and add it to total size
                struct stat buf;
                int res = lstat(filenum->d_name, &buf);
                if (res == 0)
                    total_size += buf.st_blocks;
                    printf("%s: %ld\n", filenum->d_name, buf.st_blocks);
                

            else 
                //If file is a directory
                //Add new path name and the /
                printf("%s\n", filenum->d_name);
                strcat(new_dirname, fstring);
                strcat(new_dirname, "/");
                strcat(new_dirname, filenum->d_name);

                //Add the return value to total size
                total_size += scanDir(new_dirname);
                //Clear the array for the next iteration.
                memset(new_dirname, 0, 180);
            
        
        filenum = readdir(dir);
    
    closedir(dir);
    return (total_size);

【问题讨论】:

【参考方案1】:

我解决了!我将一个与文件名相对应的字符串传递给 lstat,而不是文件 的相对路径。

【讨论】:

以上是关于计算C中嵌套目录中文件的块大小的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CUDA 中自动计算 2D 图像的块和网格大小?

div中设置背景图片,这个div中再嵌套一个div,并且设置margin-top为啥嵌套的块会移出去

C语言 如何计算结构体的大小

如何计算目录中文件的总大小[重复]

如何计算文件大小> 0的目录中有多少文件?

Objective C 中的目录大小