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