【问题标题】:Why is `volumeAvailableCapacityForImportantUsage` zero?为什么“volumeAvailableCapacityForImportantUsage”为零?
【发布时间】:2019-06-06 09:12:04
【问题描述】:

我正在关注Apple's documented example,以了解如何查询我设备上的可用磁盘空间。

我在applicationDidFinishLaunchingWithOptions 中使用以下代码:

let fileURL = URL(fileURLWithPath:"/")
do {
    let values = try fileURL.resourceValues(forKeys: [
        .volumeAvailableCapacityKey,
        .volumeAvailableCapacityForImportantUsageKey,
        .volumeAvailableCapacityForOpportunisticUsageKey,
        .volumeTotalCapacityKey
    ])
    print("Available Capacity: \(Float(values.volumeAvailableCapacity!)/1000000000)GB")
    print("ImportantUsage Capacity: \(Float(values.volumeAvailableCapacityForImportantUsage!)/1000000000)GB")
    print("Opportunistic Capacity: \(Float(values.volumeAvailableCapacityForOpportunisticUsage!)/1000000000)GB")
    print("Total Capacity: \(Float(values.volumeTotalCapacity!)/1000000000)GB")
} catch {
    print("Error retrieving capacity: \(error.localizedDescription)")
}

这会记录以下内容:

Available Capacity: 3.665879GB
ImportantUsage Capacity: 0.0GB
Opportunistic Capacity: 0.0GB
Total Capacity: 63.989494GB

为什么volumeAvailableCapacityForImportantUsage 和volumeAvailableCapacityForOpportunisticUsage 为零,在什么情况下会发生这种情况?

背景:

  • 我正在通过 xCode 10.2.1 在我自己的 64GB iPhone SE 上运行这个实验(所以总容量看起来是正确的)
  • 我的 iPhone 运行的是 iOS11
  • iTunes 声称我的设备有 10.27GB 的“免费”空间
  • 我正在努力解决这个问题,以便我知道我的用户是否有足够的空间来下载大型 (40MB+) 应用内购买项目

注意:这不与this question 相同。我知道如何查询可用空间。我想了解该查询的结果。

【问题讨论】:

  • 如果你只是print(values.volumeAvailableCapacityForImportantUsage!) - (没有转换为浮点数并且没有除法)你会得到什么?
  • 没有浮动和舍入它只是0。对于volumeAvailableCapacityForImportantUsage 和volumeAvailableCapacityForOpportunisticUsage。

标签: ios swift


【解决方案1】:

问题是您试图获取系统卷的容量 / 是文件系统的根目录。这个 API 的行为很奇怪,但你可以得到你需要的信息。如果您使用应用程序的文档目录,则 FileManager 方法和 .volumeAvailableCapacityKey 仍会产生奇怪的值,但您现在会获得 .volumeAvailableCapacityForImportantUsageKey 和 .volumeAvailableCapacityForOpportunisticUsageKey 的有用值。

例子:

let f = ByteCountFormatter()

let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
print("path = \(path)")

let attrs = try! FileManager.default.attributesOfFileSystem(forPath: path)
let fmFree = (attrs[.systemFreeSize] as! NSNumber).int64Value
print("FileManager.attributesOfFileSystem free: \(f.string(fromByteCount: fmFree))")

let docsURL = URL(fileURLWithPath: path)
let values = try! docsURL.resourceValues(forKeys: [.volumeAvailableCapacityKey, .volumeAvailableCapacityForImportantUsageKey, .volumeAvailableCapacityForOpportunisticUsageKey])
print("Volume available capacity: \(f.string(fromByteCount: Int64(values.volumeAvailableCapacity!)))")
print("Volume important available capacity: \(f.string(fromByteCount: values.volumeAvailableCapacityForImportantUsage!))")
print("Volume opportunistic available capacity: \(f.string(fromByteCount: Int64(values.volumeAvailableCapacityForOpportunisticUsage!)))")

在我的系统上打印:

FileManager.attributesOfFileSystem free: 8.51 GB
Volume available capacity: 8.51 GB
Volume important available capacity: 177.16 GB
Volume opportunistic available capacity: 175.88 GB

【讨论】:

    猜你喜欢
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 2013-05-06
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多