我用这个方法由Dave德隆使用Carbon文件管理器API来计算一个文件夹的大小:大小差异
(其第一种方法)
我遇到的问题是一些文件夹(在我的情况下.app捆绑)不报告正确的大小。例如,DiskWarrior为8.2MB,方法报告为6.6MB
有关为何发生这种情况的任何想法?
THANKS
我用这个方法由Dave德隆使用Carbon文件管理器API来计算一个文件夹的大小:大小差异
(其第一种方法)
我遇到的问题是一些文件夹(在我的情况下.app捆绑)不报告正确的大小。例如,DiskWarrior为8.2MB,方法报告为6.6MB
有关为何发生这种情况的任何想法?
THANKS
取景器将报告舍入到随后以字节为单位的实际大小的块的大小(通常为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
谢谢,我试过这种方法,它的工作原理 - 大小正如Finder报告的那样。然而,与其他方式相比,它的速度非常慢并且在负载下崩溃。我需要一次处理大量的文件和文件夹。任何其他方式来获得由Finder报告的大小? – indragie 2009-08-18 00:32:22
我改进了你链接到的我的源代码。这里的新版本:
http://github.com/davedelong/BetterInfo/blob/aa1cfe079dad6207a7ddac84b108a768c2cc7156/NSFileManager+BetterInfo.m(你还需要相应的.h文件和this support file)
现在,而不是返回和NSUInteger,它返回一个类型为“BIItemSyze”,其中有六名成员的结构: dataLogicalSize,dataPhysicalSize,resourceLogicalSize,resourcePhysicalSize,logicalSize和physicalSize。
嗯我尝试使用shell命令“du -sk <路径到文件夹>”来获取文件夹的大小,它仍然比Carbon文件管理器更接近实际的东西。我很确定du实用程序不像Finder那样围绕块大小。 – indragie 2009-08-17 21:05:38
du显示块数(磁盘使用率)。 -k使它报告1 KB块的值,而不是磁盘的块大小。 – Wevah 2009-08-17 23:08:23