【发布时间】:2014-09-11 00:42:14
【问题描述】:
在我的家庭桌面上,这是一台 Windows 机器,我右键单击属性下的 C:\Windows 文件夹,它会显示:
如果我使用Microsoft sysinternals提供的du工具
du C:\Windows
这会产生
Files: 77060
Directories: 21838
Size: 31,070,596,369 bytes
Size on disk: 31,151,837,184 bytes
如果我以管理员身份运行相同的命令
Files: 77894
Directories: 22220
Size: 32,223,507,961 bytes
Size on disk: 32,297,160,704 bytes
在以管理员身份运行 Powershell ISE 的情况下,我从 SO answer 运行了以下 powershell sn-p
"{0:N2}" -f ((Get-ChildItem -path C:\InsertPathHere -recurse | Measure-Object -property length -sum ).sum /1MB) + " MB"
哪个输出
22,486.11 MB
以下SO answer 中的 C# 代码从以管理员身份运行的命令提示符返回:
35,163,662,628 bytes
虽然关闭,但它的显示仍与 Windows 资源管理器不同。因此,这些方法都不会返回目录的实际大小。所以我的问题是这样的。
是否有脚本或编码方法可以返回 C:\Windows 的实际文件夹大小
如果无法检索文件夹大小,是否可以通过编程方式检索 Windows 资源管理器显示的信息?
【问题讨论】:
-
这可能与它作为操作系统目录有关,随着时间的推移添加/删除不同的东西,并且根据您所处的模式不同的东西可用?你有没有在更静态的目录(一个充满图片或其他东西的随机文件夹)上尝试过这个实验?
-
我相信
du的数字(以管理员身份运行时)可能是准确的。 Explorer 生成的数字将重复计算硬链接。尝试使用带有-u选项的du命令(它也告诉它双重计算硬链接)进行比较。 OTOH,我不确定这些是否考虑到目录元数据的大小,并且可能没有一个包括 MFT 条目的大小。 (如您所见,“实际文件夹大小”是一个有点模糊的概念,这完全取决于您的意思。) -
this answer 上的 cmets 解释了如何以编程方式获取 Explorer 的“文件夹大小”计算。
-
我想我的最终目标是找到一种方法来获取文件夹的总大小,而不管我是否有权访问其子目录或文件。我想这可能是不可能的,但我想我会问。这是获取文件夹实际大小的唯一方法。
-
@HarryJohnston 我试过了。如果我无权访问其中一个文件或文件夹,则会收到拒绝访问错误。我不确定 du 是否能够绕过权限。我的猜测可能不是。
标签: windows filesystems directory