所有文件夹的大小都是 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/