【问题标题】:Finding actual size of a folder in Windows在 Windows 中查找文件夹的实际大小
【发布时间】: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


【解决方案1】:

当涉及到 Windows 时,它们有一种奇怪的实际存储数据的方式,例如,一个文件的大小可能为 1mb,当存储在磁盘上时,它可能会是 1.1mb,原因是其中包括目录链接到磁盘上的实际文件,并且估计的大小不包括可能的附加数据窗口与相关数据一起存储。

现在您可能会想,这很好,但您如何解释从管理员查看文件大小时的巨大大小变化,这是一个很好的问题,因为这是另一个一起存储的附加标头/元数据只允许管理员查看的文件。

回到关于告诉文件实际大小的原始问题,这对于 Windows 来说很难说,因为它与所需文件一起使用的额外数据量,但出于可读性目的,或者如果您正在使用它进行某种形式的编码,我建议使用 admin 命令在磁盘上查找大小,这不是因为文件似乎处于最大大小(对我来说是),而是因为通常当你正在寻找传输这可能是您可以使用的最可靠的数字,因为一旦您传输文件,一些额外的数据将被删除或更改,并且您已经知道文件大小差异的可能波动幅度。

您还必须考虑硬盘驱动器格式(NTFS、fat32),因为它是如何分割文件的,因为如果文件很大,它也会稍微改变文件大小。 1GB++

希望能帮上忙,因为我们都知道在尝试获取信息时窗口是多么美妙(叹息)。

【讨论】:

    【解决方案2】:

    歧义和差异与联结、软链接和硬链接有很大关系(如果您来自 *nix 世界,则类似于符号链接)。最大的问题:几乎没有 Windows 程序能很好地处理硬链接——它们看起来(而且确实是)“普通”文件。 Windows 中的所有文件都有 1 个以上的硬链接。

    您可以使用Sysinternals Disk Usage utility 获得“真实”磁盘存储的指示

    > du64 c:\windows

    我的机器上的产量:

    DU v1.61 - Directory disk usage reporter
    Copyright (C) 2005-2016 Mark Russinovich
    Sysinternals - www.sysinternals.com
    
    Files:        204992
    Directories:  57026
    Size:         14,909,427,806 bytes
    Size on disk: 15,631,523,840 bytes
    

    这比您在属性对话框中右键单击并获取大小时看到的要小 很多。默认情况下,du64 不会重复计算具有多个硬链接的文件——它返回 true 已使用的磁盘空间。这也是为什么这个命令需要一段时间来处理的原因。您可以使用-u 选项让磁盘使用实用程序天真地计算所有链接的大小。

    > du64 -u c:\windows
    
    DU v1.61 - Directory disk usage reporter
    Copyright (C) 2005-2016 Mark Russinovich
    Sysinternals - www.sysinternals.com
    
    Files:        236008
    Directories:  57026
    Size:         21,334,850,784 bytes
    Size on disk: 22,129,897,472 bytes
    

    这要大得多——但它是具有指向同一存储空间的多个链接的双重计算文件。希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多