如何在C中获取目录的大小?

时间:2009-01-23 12:23:22

标签: c size posix directory

是否有POSIX功能可以提供目录(包括所有子文件夹)的大小,大致相当于“du -s somepath”?

3 个答案:

答案 0 :(得分:26)

$ man nftw
  

命名

     

ftwnftw - 文件树步行

     

<强>描述

     

ftw()遍历目录树   位于目录下   dirpath,并为每个调用fn()一次   进入树。默认情况下,   目录在之前处理   它们包含的文件和子目录   (预订遍历)。

     

遵守

     

POSIX.1-2001,SVr4,SUSv1。

简单示例

#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>

static unsigned int total = 0;

int sum(const char *fpath, const struct stat *sb, int typeflag) {
    total += sb->st_size;
    return 0;
}

int main(int argc, char **argv) {
    if (!argv[1] || access(argv[1], R_OK)) {
        return 1;
    }
    if (ftw(argv[1], &sum, 1)) {
        perror("ftw");
        return 2;
    }
    printf("%s: %u\n", argv[1], total);
    return 0;
}

答案 1 :(得分:2)

没有现成的功能,所以你必须自己制作。您可以查看du的GNU实现的源代码作为示例(有关要下载的位置列表,请参阅http://www.gnu.org/prep/ftp.html)。它位于coreutils包中。

关键的Posix调用可能是opendirreaddirclosedirstat

答案 2 :(得分:0)

以字节为单位的结果:

du -sb | grep -oE '^\s*[0-9]+'