xcode - 在 cocoa 应用程序中以 int 形式检索垃圾箱大小

标签 xcode cocoa nstask recycle-bin

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 创建目录枚举器路过NSURLTotalFileAllocatedSizeKeykeys数组,通过该枚举器进行枚举,获取每个项目的 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/

相关文章:

ios - 如何在项目中包含 GData?

objective-c - 解析json不正确

objective-c - 获取NSCollectionViewItem NSButton click的representedObject值

cocoa - 从 NSTask 运行的程序中阻止标准

java - 在 Objective-C 中解压 .jar 文件

cocoa - 如何使用确定的 NSProgressIndicator 来检查 NSTask 的进度? - cocoa

ios - 简单自定义 UITableViewCell 的自动布局错误

ios - Xcode 7.1分配工具SIP合适

objective-c - NSTextField - 可选择和 mouseup 事件

iphone - 'dyld`__abort_with_payload :' not launching app in simulator and not find any exact solution