可可应用程序是否可以将垃圾的大小作为整数检索。NSTask
正确的方法吗?
简单的方法可以做到这一点。尽管Mac GUI提供了一个统一的垃圾箱,但垃圾箱不仅仅是一件事。每个卷可以有一个单独的垃圾箱,卷可以来来去去。
此外,计算文件夹内容的大小可能非常耗时,因此这似乎不是一个好主意。
如果你真的想这样做,你会使用类似 -[NSFileManager mountedVolumeURLsIncludingResourceValuesForKeys:options:]
的东西枚举所有挂载的卷,使用 CFURLGetFSRef()
将 URL 转换为 FSRef
s,使用 FSGetCatalogInfo()
传递kFSCatInfoVolume
从FSRef
获取卷参考号whichInfo
,使用 FSFindFolder()
传递kTrashFolderType
查找每个卷的垃圾箱 folderType
, 使用 CFURLCreateFromFSRef()
将生成的FSRef
转换为 URL,使用 keys
数组中传递NSURLTotalFileAllocatedSizeKey
-[NSFileManager enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:
为该 URL 创建一个目录枚举器,通过该枚举器枚举获取每个项目的NSURLTotalFileAllocatedSizeKey
作为NSNumber
,并累积这些NSNumber
的-unsignedLongLongValue
。
实际上,使用 FSGetVolumeInfo()
枚举卷可能更容易,为 volume
传递 kFSInvalidVolumeRefNum
,为 volumeIndex
传递索引,从 1 开始。你也会通过kFSVolInfoNone
whichInfo
.您将递增索引并重复,直到它返回nsvErr
。优点是这直接为您提供了卷参考号,因此您不必从 URL 转到FSRef
再到卷参考号。缺点是这是另一个旧式 API。但是,您别无选择,只能使用这些 API,因为上述 API 中没有替代FSFindFolder()
。
无论如何,当您枚举卷以获取其垃圾文件夹时,您必须准备好遇到没有垃圾文件夹的卷。例如,网络装载的卷通常不会。