1

我使用 Dave DeLong 的这个方法来计算使用 Carbon File Manager API 的文件夹的大小:

http://github.com/davedelong/BuildCleaner/blob/b2712242b4eea1fff0e78a08b393a417e3019c8a/NSFileManager+FileSize.m

(这是第一种方法)

我遇到的问题是某些文件夹(在我的情况下是 .app 包)没有报告正确的大小。比如DiskWarrior是8.2MB,方法报6.6MB

关于为什么会发生这种情况的任何想法?

谢谢

4

3 回答 3

2

我已经改进了您链接到的我的源代码。这是较新的版本:

http://github.com/davedelong/BetterInfo/blob/aa1cfe079dad6207a7ddac84b108a768c2cc7156/NSFileManager+BetterInfo.m (你还需要相应的.h文件和这个支持文件

现在它不再返回 NSUInteger,而是返回一个“BIItemSyze”类型的结构,它有六个成员:dataLogicalSize、dataPhysicalSize、resourceLogicalSize、resourcePhysicalSize、logicalSize 和physicalSize。

于 2009-08-20T01:58:25.533 回答
1

Finder 将报告文件大小四舍五入到最接近的块大小倍数(通常为 4 KB),然后是实际大小(以字节为单位),并且许多(大多数)应用程序是文件包,因此应用程序的真实大小可能要小得多比显示为第一个(“磁盘上”)值的大小。

您可以通过执行以下操作(在终端中)来测试它:

echo -n 'foo' > foo.txt

如果您在 Finder 中获取有关此文件的信息,它将报告大小为“磁盘上 4 KB(3 字节)”。

于 2009-08-17T20:24:40.707 回答
0

如果您知道如何在代码中使用 applescript,这里有一个方法可以返回您在 Finder Get Info 窗口中看到的大小。请注意,返回值以字节为单位。

on getSizeInBytesFromPosixPath(posixPath)
    try
        set b to (POSIX file posixPath) as string
        tell application "Finder" to return size of (b as alias)
    on error
        return 0
    end try
end getSizeInBytesFromPosixPath
于 2009-08-17T23:02:26.550 回答