递归地添加目录大小的先前值

时间:2016-02-24 16:12:25

标签: c recursion

我正在编写一个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 ..正常工作的原因是因为我尝试了一种解决方法,但似乎只能在最大的主目录上工作,任何人都知道如何将它应用于所有内容?

我将继续努力,如果我弄明白,我会为感兴趣的人更新此内容。

编辑:谢谢你收到它,是的,只是返回值似乎已修复它,谢谢:)

1 个答案:

答案 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;