获取目录的大小而不是目录的大小

问题描述

(请先将其视为已回答,再阅读完整的问题)

在C ++中,我们可以通过运行std::filesystem::file_size(PATH);获得常规文件文件大小,但是此功能在目录上不起作用,这是我的问题。 我需要知道目录“ inode”的大小,在(大多数)linux系统中,目录的标准大小是4kB或块大小:

$:~/tmp/test$ mkdir ex
$:~/tmp/test$ ls -l
total 4
drwxrwxr-x 2 secret secret 4096 Oct 15 08:43 ex

这些4kB包含用于在该目录中包含文件“列表”的空间。 但是,如果目录中的文件数量变得非常大,则文件夹的大小可能会增加(这就是我所在的位置)。 我需要能够跟踪这种增长。 所以我的问题是,除了从C ++调用ls -ldu之外,还有C ++原生的方法获取目录的大小吗? 我知道它不适用于std::filesystem::file_size(path)的原因是由于文件系统以不同的方式表示目录。

解决方法

https://en.cppreference.com/w/cpp/filesystem/file_size

对于常规文件p,返回的大小就像通过读取 通过POSIX stat获得的结构的st_size成员(符号链接为 跟着)

尝试确定目录大小的结果(同样 与其他不是常规文件或符号链接的文件一样) 实现定义的。

file_size在目录上实际上可以在某些实现中工作,但是我想您的目录可能不行。似乎没有纯粹的C ++替代方法,但是您可以自己调用POSIX stat函数。那确实适用于目录并报告您想要的号码。