Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Finder和Carbon file manager的文件夹大小之间存在大小差异_Objective C_Cocoa_Size_Directory_Macos Carbon - Fatal编程技术网

Objective c Finder和Carbon file manager的文件夹大小之间存在大小差异

Objective c Finder和Carbon file manager的文件夹大小之间存在大小差异,objective-c,cocoa,size,directory,macos-carbon,Objective C,Cocoa,Size,Directory,Macos Carbon,我使用Dave DeLong的此方法使用Carbon File Manager API计算文件夹的大小: (这是第一种方法) 我遇到的问题是,一些文件夹(.app bundle)报告的大小不正确。例如,DiskWarrior为8.2MB,而该方法报告为6.6MB 你知道为什么会这样吗 感谢Finder将报告文件大小,四舍五入到块大小(通常为4KB)的最近倍数,然后是以字节为单位的实际大小,并且许多(大多数)应用程序都是文件包,因此应用程序的实际大小可能远小于第一个(“磁盘上”)值所示的大小 您

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

(这是第一种方法)

我遇到的问题是,一些文件夹(.app bundle)报告的大小不正确。例如,DiskWarrior为8.2MB,而该方法报告为6.6MB

你知道为什么会这样吗


感谢

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

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

echo-n'foo'>foo.txt


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

如果您知道如何在代码中使用applescript,下面是一种返回Finder获取信息窗口中显示的大小的方法。请注意,返回的值以字节为单位

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

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

(您还需要相应的.h文件和)


现在,它不再返回和NSUInteger,而是返回一个类型为“BIItemSyze”的结构,它有六个成员:dataLogicalSize、dataPhysicalSize、resourceLogicalSize、resourcePhysicalSize、logicalSize和physicalSize,而且它的报告仍然比碳文件管理器更接近实际情况。我很确定du实用程序不会像Finder那样对块大小进行取整。du显示块计数(磁盘使用)-k使它以1KB的块来报告值,而不是以磁盘的块大小来报告值。谢谢,我尝试了这个方法,它工作了——大小和Finder报告的完全一样。但是,与其他方法相比,它的速度非常慢,并且在负载下崩溃。我需要一次处理大量的文件和文件夹。有没有其他方法可以获得Finder报告的大小?