c - 如何使用递归获取 C 中文件夹的总大小?

标签 c recursion directory size stat

所有文件夹的大小都是 4096 B。

如何获取包含所有文件大小的文件夹的总大小?

例如:

> Dir1 (4096)
> -- File1.txt (100)
> -- Dir 2 (4096)
> ---- File2.txt (100)

当我尝试获取 Dir1 的大小时,它给了我 4096。 我希望得到的预期答案是 8392

另一个例子:

DirA (4096)
-- FileA (100)
-- FileB (100)

总数应该是4296

我正在尝试找出算法,但找不到检测它是否为文件夹的方法。抱歉下面的“粗俗”代码...

DIR *dir;
struct dirent *dp;
struct stat fileStat;
    int getTotalDirSize()
    {
        while()
        {
            if(/*Detect Folder/Directory*/)
            {
            totalSize += 4096;
                getTotalDirSize();
            }
            else
            {
                totalSize += fileSize;
            }

        }

        return totalSize;
    }

注意:我正在使用 struct stat 来获取大小和文件/文件夹名称。

最佳答案

它与 stat 一起使用,但您唯一需要做的就是提供 stat 的完整路径,就像在您的示例 Dir1->4096B 中那样,然后如果您想知道 File1 的大小。 txt 像这样在 stat 中使用:

strcpy(str,Dir1);   //str is a string
strcat(str,"/");
strcat(str,filename);

然后在 stat 中使用 str 来获取该文件的大小。我认为在这里您必须对文件夹及其内容使用 dirent 结构 和 DIR。

要查找文件夹,请使用 d_type = 4 作为目录结构 指针。对于递归操作,将所有内容放在一个单独的函数中并递归调用它,直到文件夹搜索完成。

struct stat buf;
DIR *dptr;
struct dirent *sdir;
int size=0;
char str[100];

dptr=opendir(folder);
while(sdir=readdir(dptr))
{
    if(sdir->d_type==4)
    {
        if(sdir->d_name[0]!='.')
        {
            stat(sdir->d_name,&buf);
            size=buf.st_size;
            pf("size=%d\n",size);
        }
    }
    else
    {
        strcpy(str,folder);
        strcat(str,"/");
        strcat(str,sdir->d_name);
        stat(str,&buf);
        size+=buf.st_size;
        pf("size=%d\n",size);
    }
}

关于c - 如何使用递归获取 C 中文件夹的总大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21569578/

相关文章:

c++ - 用 C++ 编写递归函数的最佳方法?

linux - 查找子目录并删除不包含特定字符串的文件 LINUX

c++ - 需要帮助在 Makefile 中创建多个目录

go - 如何使用 golang 在本地主机系统中创建临时目录

c++ - 如何在 linux 中使用 Makefile 编译 tensorflow c_api

c++ - C++中分配内存和指针的问题

审查c中的单词

c - 斐波那契!如果一直都是假的

python - 函数调用错误值

recursion - 尾递归与迭代算法