我正在编写一个 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/