我想要目录的大小,但对于每个目录,程序打印“4096”。如何打印实际尺寸?
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<sys/stat.h>
int main(int argc,char* argv[]){
int i,p[2];
pipe(p);
struct stat buf;
for(i=1; i<argc; i++){
printf("%s\n",argv[i]);
stat(argv[i],&buf);
if(S_ISDIR(buf.st_mode)){
printf("%s is a directory\n",argv[i]);
printf("%zu", buf.st_size);
}
}
return 0;
}
我尝试了printf("%llu", (unsigned long long)buf.st_zise)
,printf("%lu",(long unsigned)buf.st_size)
,但结果是一样的。
答案 0 :(得分:0)
您无法使用stat()
查找目录内容的大小。它不是递归的。它只是告诉你目录节点(没有子节点)的大小是4096字节(即一个块)。
相反,您需要递归遍历整个目录,总结内部所有文件的大小。请注意,因为里面可能有符号链接,硬链接甚至是圆形链接!如果您只关心获取目录第一级的总大小(即文件立即在其中),将会更容易。
有关为什么这并不像您想象的那么容易,请参阅2004年的这篇永恒的帖子:https://blogs.msdn.microsoft.com/oldnewthing/20041228-00/?p=36863