我使用 Dave DeLong 的这个方法来计算使用 Carbon File Manager API 的文件夹的大小:
(这是第一种方法)
我遇到的问题是某些文件夹(在我的情况下是 .app 包)没有报告正确的大小。比如DiskWarrior是8.2MB,方法报6.6MB
关于为什么会发生这种情况的任何想法?
谢谢
我使用 Dave DeLong 的这个方法来计算使用 Carbon File Manager API 的文件夹的大小:
(这是第一种方法)
我遇到的问题是某些文件夹(在我的情况下是 .app 包)没有报告正确的大小。比如DiskWarrior是8.2MB,方法报6.6MB
关于为什么会发生这种情况的任何想法?
谢谢
我已经改进了您链接到的我的源代码。这是较新的版本:
http://github.com/davedelong/BetterInfo/blob/aa1cfe079dad6207a7ddac84b108a768c2cc7156/NSFileManager+BetterInfo.m (你还需要相应的.h文件和这个支持文件)
现在它不再返回 NSUInteger,而是返回一个“BIItemSyze”类型的结构,它有六个成员:dataLogicalSize、dataPhysicalSize、resourceLogicalSize、resourcePhysicalSize、logicalSize 和physicalSize。
Finder 将报告文件大小四舍五入到最接近的块大小倍数(通常为 4 KB),然后是实际大小(以字节为单位),并且许多(大多数)应用程序是文件包,因此应用程序的真实大小可能要小得多比显示为第一个(“磁盘上”)值的大小。
您可以通过执行以下操作(在终端中)来测试它:
echo -n 'foo' > foo.txt
如果您在 Finder 中获取有关此文件的信息,它将报告大小为“磁盘上 4 KB(3 字节)”。
如果您知道如何在代码中使用 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