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

标签 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 .. 之所以能正常工作,是因为我尝试了一种解决方法,但这似乎只适用于最大的主目录,有人知道我如何将其应用于所有内容吗?

我将继续研究这个问题,如果我弄清楚了,我会为感兴趣的人更新此内容。

编辑:谢谢您获取它,是的,简单地返回值似乎已经修复了它,谢谢:)

最佳答案

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;

关于c - 递归添加目录大小的先前值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35607230/

相关文章:

c - 如何从链表/队列中删除所有具有相同值的节点

c - 我需要在符号前放什么?

list - 以 "overlapped"的方式向列表添加值

java - 使用 DFS 计算 Java 中 5x5 场上可能的骑士移动

recursion - 提前编译时 Clojure fn 名称泄漏到其范围之外

java - 将可变大小的数组从 C 返回到 Java

c - 通过宏将变量声明为内联函数

javascript - 使用 JavaScript 进行递归回文检查

javascript - 递归返回函数调用——理论re return语句

c++ - 模拟 Fn+F11 按键