【问题标题】:Get the size of a directory (not its content)获取目录的大小(不是其内容)
【发布时间】:2020-10-15 06:46:48
【问题描述】:

(请在将其视为已回答的问题之前,阅读完整的问题)

在 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++-native 获取目录大小的方法吗? 我知道它不适用于std::filesystem::file_size(path) 的原因是文件系统表示目录的方式不同。

【问题讨论】:

    标签: c++ filesystems std filesize


    【解决方案1】:

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

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

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

    file_size 在目录上可能实际上在某些实现中有效,但我猜你的不是。似乎没有纯 C++ 替代方案,但您可以自己调用 POSIX stat 函数。这确实适用于目录并报告您想要的数字。

    【讨论】:

    • 是的,具体实现。
    • 我没有考虑过使用stat 的选项,非常感谢。似乎工作
    猜你喜欢
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2014-06-13
    • 1970-01-01
    相关资源
    最近更新 更多