c++ - 如何获取目录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);
}
}
解决方案
由于您在评论中指定了您正在询问 Windows:
文件由文件索引或文件表中的条目指示(MFT 表示 NTFS,FAT 表示 FAT 文件系统)。该表位于物理文件系统(例如硬盘)的特殊位置,保存每个文件的地址和元数据。文件大小是文件实际占用的空间量;这可以是零或任何更大的大小。当文件没有数据时,它是空的(大小 = 0)。
在 Windows 文件系统中,目录的大小是其中所有文件(以及子文件夹中的文件)的总和。因此,一个空目录的大小为零。
资料来源:为什么空文件夹在 Windows 上的字节数为零?
STLfilesystem::file_size
仅适用于文件,它对目录抛出异常:filesystem error: cannot get file size: Is a directory [dir]
. 为什么?因为目录只是文件索引或表中的一个条目。
在 Windows 上,当您检查包含许多子目录/文件的目录时,您可能会注意到属性上报告的“磁盘大小”逐渐增加;这推断系统正在通过子目录/文件递归迭代以汇总所有文件大小......您可以做一个实验来检查完整大小是否真的等于所有单个文件的总和(不包括目录)。
推荐阅读
- excel - 如何使用 VBA 代码获取剪贴板中的所有内容?
- linux - 如何在vim中显示行号以及启用复制到系统剪贴板?
- javascript - 从后面获取数组项
- python - 使用 Beautiful Soup 抓取 id="author"
- swift - Swift 4 SpriteKit SKTexture 缩放问题
- go - 为什么 golang ticker.Stop() 在tickerTest1 中不起作用?
- python - 如何在python中从带有数字和字符串的列表中打印表格
- css - 如何在 CSS 中第二次单击时失去焦点超链接
- vuejs2 - VueJs - Element UI el-select:如何获取价值父母和孩子
- python - 通过python在电报机器人的url中传递文本/字符串