Cocoa apis报告可用空间的值不正确,我应该使用什么?

时间:2012-07-22 02:31:54

标签: objective-c cocoa osx-lion

有没有人知道苹果公司正在使用什么api获取信息面板以确定Lion中的可用空间?我试图获得Apple报告的相同可用空间的所有代码都失败了,甚至Quick Look也没有显示Get Info显示的相同空间。如果我删除一堆文件并尝试读取可用空间,这似乎就会发生。

Incorrect free space on Lion

当我使用NSFileManager时 - > NSFileSystemFreeSize我得到42918273024字节

当我使用NSURL时 - > NSURLVolumeAvailableCapacityKey我得到42918273024字节

当我使用statfs时 - > buffer.f_bsize * buffer.f_bfree我得到43180417024字节

statfs获得与Quick Look类似的结果,但如何匹配Get Info?

2 个答案:

答案 0 :(得分:1)

您可能会看到本地Time Machine快照备份的结果。以下引用来自以下Apple支持文章 - OS X Lion: About Time Machine's "local snapshots" on portable Macs

  

OS X Lion中的Time Machine包含一项名为“local”的新功能   快照“保存您创建,修改或删除的文件的副本   你的内部磁盘。本地快照与常规Time Machine相称   备份(存储在外部磁盘或Time Capsule上)给出   你有可能远离外部的“安全网”   备份磁盘或Time Capsule并意外删除文件。

文章最后说:

  

注意:您可能会发现“磁盘工具”,“Finder”和“获取信息”检查器之间的可用空间统计信息存在差异。这是   预期,可以安全地忽略。 Finder显示可用的   磁盘空间而不考虑本地快照,因为   如果需要,本地快照将放弃他们的磁盘空间。

看起来所有测试可用磁盘空间的编程方法都会在磁盘上提供真正的可用空间值,而不是通过删除本地Time Machine备份可以提供的空间。我怀疑像df这样的命令行工具是否已经了解本地Time Machine备份。

答案 1 :(得分:0)

这是一个变通方法,而不是一个真正的api,但是好的旧unix命令df -H将获得与“获取信息”面板中相同的信息,您只需要选择你的磁盘并解析输出。

df程序还有许多其他您可能想要探索的选项。在这种特殊情况下,-H开关告诉程序以人类可读的格式吐出数字并使用基数为10的大小。

在这里查看如何从应用程序中运行命令行并获取程序中的输出:Execute a terminal command from a Cocoa app

我认为df和获取信息面板的基础非常可能是相同的。