我正在编写一个C程序,当给定目录时,它将递归遍历所有子目录并获取所有文件的大小。基本上,模仿" du"功能
事情是,我似乎无法将子目录中的文件添加到其父目录。
if (S_ISDIR(statbuf.st_mode)) {
recurSize(file);
以上是我的主要循环,我会确保它跳过。和...以对抗无限循环。然后设置文件名并添加子目录中所有文件的大小。如何将size += statbuf.st_blocks / 2;
的大小添加到recurSize(file);
(这是递归函数)?
我的输出示例:
116 ../A2
4 ../bellow/mellow
8 ../bellow
76 ../A1
4 ../submit/temp
84 ../submit
292 ..
预期产出:
116 ../A2
4 ../bellow/mellow
12 ../bellow
76 ../A1
4 ../submit/temp
88 ../submit
292 ..
292 ..
正常工作的原因是因为我尝试了一种解决方法,但似乎只能在最大的主目录上工作,任何人都知道如何将它应用于所有内容?
我将继续努力,如果我弄明白,我会为感兴趣的人更新此内容。
编辑:谢谢你收到它,是的,只是返回值似乎已修复它,谢谢:)答案 0 :(得分:0)
if (S_ISDIR(statbuf.st_mode)) {
recurSize(file);
不返回在新递归中找到的大小。你需要让它返回它找到的大小。
if (S_ISDIR(statbuf.st_mode)) {
// Showing as two statements for clarity.
newsize = recurSize(file);
size += newsize;
然后在recurSize()
结束时你需要
return size;