【问题标题】:Cocoa apis reporting incorrect values for free space, what should I use?Cocoa apis 报告可用空间的错误值,我应该使用什么?
【发布时间】:2012-07-22 02:31:53
【问题描述】:

有谁知道 Apple 使用什么 api 来确定 Lion 中的可用空间的 Get Info 面板?我试图获得与 Apple 报告的相同可用空间失败的所有代码,即使 Quick Look 也没有显示 Get Info 显示的相同空间。如果我删除一堆文件并尝试读取可用空间,这似乎会发生。

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

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

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

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

【问题讨论】:

  • 这可能是base 2和base 10计算之间的差异。我认为苹果在 SL 中将系统范围的存储空间更改为 base 10,但我不知道为什么它们会相差那么远。由于交换、缓存和屏幕截图,它们可能略有不同
  • 我不记得两者之间的转换公式了。
  • Mountain Lion 添加了 NSByteCountFormatter 可以帮助您。见developer.apple.com/library/mac///#/library/mac/documentation/…

标签: objective-c cocoa osx-lion


【解决方案1】:

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

OS X Lion 中的 Time Machine 包含一项名为“本地 快照”,保留您创建、修改或删除的文件的副本 您的内部磁盘。本地快照与常规 Time Machine 相得益彰 备份(存储在您的外部磁盘或 Time Capsule 上) 当您可能远离外部环境时,您是一个“安全网” 备份磁盘或 Time Capsule 并意外删除文件。

文章最后说:

注意:您可能会注意到“磁盘工具”、“Finder”和“获取信息”检查器之间的可用空间统计数据有所不同。这是 预期的,可以安全地忽略。 Finder 显示可用的 磁盘上的空间而不考虑本地快照,因为 如果需要,本地快照将放弃其磁盘空间。

您尝试过的所有测量可用磁盘空间的编程方法似乎都给出了磁盘上真正的可用空间值,而不是通过删除本地 Time Machine 备份可以提供的空间。我怀疑像 df 这样的命令行工具是否也知道本地 Time Machine 备份。

【讨论】:

    【解决方案2】:

    这是一种解决方法,不是真正的 api,但是好的旧 unix 命令df -H 会为您提供与“获取信息”面板中相同的信息,您只需要选择磁盘行并解析输出。

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

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

    我相信df 和获取信息面板的基础很可能是相同的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 2016-03-27
      • 2012-09-22
      • 1970-01-01
      • 2014-11-08
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多