Finder文件夹大小与Carbon文件管理器之间的大小差异

时间:2009-08-17 18:15:37

标签: objective-c cocoa size directory macos-carbon

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

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

(这是第一种方法)

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

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

感谢

3 个答案:

答案 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