0

可可应用程序是否可以将垃圾的大小作为 int 检索。这样做是NSTask正确的方法吗?

4

1 回答 1

3

没有简单的方法可以做到这一点。尽管 Mac GUI 提供了一个统一的垃圾箱,但垃圾箱并不是只有一件事。每个卷都可以有一个单独的垃圾箱,并且卷可以来来去去。

此外,计算文件夹内容的大小可能非常耗时,因此这似乎不是一个好主意。

如果你真的想这样做,你会使用类似的东西枚举所有已安装的卷-[NSFileManager mountedVolumeURLsIncludingResourceValuesForKeys:options:],将 URL 转换为FSRefs using ,从using传递forCFURLGetFSRef()获取卷参考号,使用传递for找到每个卷的垃圾箱,转换使用 得到URL的结果,使用传入数组为该 URL 创建一个目录枚举器,通过该枚举器枚举,将每个项目的作为,并累积这些s 的s。FSRefFSGetCatalogInfo()kFSCatInfoVolumewhichInfoFSFindFolder()kTrashFolderTypefolderTypeFSRefCFURLCreateFromFSRef()-[NSFileManager enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:NSURLTotalFileAllocatedSizeKeykeysNSURLTotalFileAllocatedSizeKeyNSNumber-unsignedLongLongValueNSNumber

实际上,使用从 1 开始的 for FSGetVolumeInfo()、传递kFSInvalidVolumeRefNumforvolume和索引来枚举卷可能更容易volumeIndex。你也会通过kFSVolInfoNone. whichInfo您将增加索引并重复直到它返回nsvErr。优点是这会直接为您提供卷参考号,因此您不必从 URL 转到FSRef卷参考号。缺点是这是一种更老式的 API。但是,您别无选择,只能使用这些 API,因为FSFindFolder()上述内容无可替代。

无论如何,当您枚举卷获取它们的垃圾文件夹时,您必须准备好遇到没有垃圾文件夹的卷。例如,网络安装的卷通常不会。

于 2012-07-07T12:33:56.967 回答