cocoa 应用程序是否可以以 int 形式检索垃圾的大小。 NSTask
是执行此操作的正确方法吗?
最佳答案
没有简单的方法可以做到这一点。虽然 Mac GUI 提供了统一的垃圾箱,但垃圾箱并不只有一种。每个卷都可以有一个单独的垃圾箱,并且卷可以来来去去。
此外,计算文件夹内容的大小可能非常耗时,因此这似乎不是一个好主意。
如果您确实想要这样做,您可以使用 -[NSFileManager mountedVolumeURLsIncludingResourceValuesForKeys:options:]
之类的内容枚举所有已安装的卷。 ,将 URL 转换为 FSRef
使用CFURLGetFSRef()
,从 FSRef
获取卷引用号使用FSGetCatalogInfo()
路过kFSCatInfoVolume
对于 whichInfo
,使用 FSFindFolder()
查找每个卷的垃圾箱路过kTrashFolderType
对于 folderType
,转换结果FSRef
使用 CFURLCreateFromFSRef()
到 URL ,使用 -[NSFileManager enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:
为该 URL 创建目录枚举器路过NSURLTotalFileAllocatedSizeKey
在 keys
数组,通过该枚举器进行枚举,获取每个项目的 NSURLTotalFileAllocatedSizeKey
作为NSNumber
,并累积-unsignedLongLongValue
其中NSNumber
s。
使用 FSGetVolumeInfo()
枚举卷实际上可能更容易,路过kFSInvalidVolumeRefNum
对于 volume
和一个索引,从 1 开始,volumeIndex
。您还可以通过 kFSVolInfoNone
对于 whichInfo
。您可以增加索引并重复,直到返回 nsvErr
。优点是,这可以直接为您提供卷引用号,因此您不必从 URL 转到 FSRef
到卷引用号。缺点是这是一种比较旧式的 API。但是,您别无选择,只能使用这些 API,因为 FSFindFolder()
无可替代。在上面。
无论如何,当您枚举卷获取其垃圾文件夹时,您必须准备好遇到没有垃圾文件夹的卷。例如,网络安装的卷通常不会。
关于xcode - 在 cocoa 应用程序中以 int 形式检索垃圾箱大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11374202/