c++ - 获取目录的大小(而不是目录的大小)

标签 c++ filesystems std filesize

(请先解决此问题,再阅读完整的问题)
在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

For a regular file p, returns the size determined as if by reading the st_size member of the structure obtained by POSIX stat (symlinks are followed)

The result of attempting to determine the size of a directory (as well as any other file that is not a regular file or a symlink) is implementation-defined.


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

关于c++ - 获取目录的大小(而不是目录的大小),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64366216/

相关文章:

c++ - vector 乘法中的 SIMD 与 OMP

java - FileNotFoundException - 设备上没有剩余空间

powershell - 有什么方法可以在指定时间过滤所有文件吗?

c++ - 删除前是否应该关闭文件?

ios::noreplace 的 C++ 替换

c++ - std::unordered_set 中的 KeyEqual 有什么用?

c++ - 如何将 std::chrono::time_point 转换为带有小数秒的日历日期时间字符串?

c++ - 从数组构造 std::set

c++ - 为什么 vector.push_back(auto_ptr) 无法编译?

c++ - 简单解决方案的输出不正确