首页 > 解决方案 > 如何获取目录C ++的磁盘大小

问题描述

如何使用 C++ 代码而不是文件大小获取磁盘大小?

我正在尝试获取目录(文件夹)在磁盘上的大小,并且将文件大小相加仅给出实际文件大小。我需要的是磁盘上的大小,有没有办法得到它?

谢谢

#include <iostream> 
using namespace std;
#include <filesystem>
using namespace std::filesystem;
int main(size_t argc, char* argv[])
{
   if (argc == 1) {
        void rscan3(path const&, unsigned i = 0);
        rscan3(".");

    }
}
void rscan3(path const& f, unsigned i) {
    string indent(i, ' ');
    uintmax_t size = 0;
    for (auto d : directory_iterator(f)) {

        size += d.file_size();
        cout << indent << "Folder = " << absolute(f).string() << " SIZE: " << size << endl;
        if (is_directory(d.status())) 
            rscan3(d.path(), i + 2);

    }
}

标签: c++filesystemsfilesizediskutility

解决方案


由于您在评论中指定了您正在询问 Windows:

文件由文件索引或文件表中的条目指示(MFT 表示 NTFS,FAT 表示 FAT 文件系统)。该表位于物理文件系统(例如硬盘)的特殊位置,保存每个文件的地址和元数据。文件大小是文件实际占用的空间量;这可以是零或任何更大的大小。当文件没有数据时,它是空的(大小 = 0)。

在 Windows 文件系统中,目录的大小是其中所有文件(以及子文件夹中的文件)的总和。因此,一个空目录的大小为零。

资料来源:为什么空文件夹在 Windows 上的字节数为零?

STLfilesystem::file_size仅适用于文件,它对目录抛出异常:filesystem error: cannot get file size: Is a directory [dir]. 为什么?因为目录只是文件索引或表中的一个条目。

在 Windows 上,当您检查包含许多子目录/文件的目录时,您可能会注意到属性上报告的“磁盘大小”逐渐增加;这推断系统正在通过子目录/文件递归迭代以汇总所有文件大小......您可以做一个实验来检查完整大小是否真的等于所有单个文件的总和(不包括目录)。


推荐阅读