【问题标题】:What errors does FileManager throw?FileManager 会抛出什么错误?
【发布时间】:2020-02-16 00:00:51
【问题描述】:

FileManager 的方法会抛出哪些错误?具体来说,我对attributesOfItem(atPath:) 可能引发的错误感兴趣。

这就是我想使用它的方式:

do {
    let inode = try FileManager.default.attributesOfItem(atPath: somePath)[.systemFileNumber]
} catch SomeError.someSpecificError (let someContext) {
    /* implementation omitted... */
}

【问题讨论】:

  • 使用try? 它永远不会抛出任何东西。它将返回一个可选而不是抛出错误。您需要使用try 和简单的} catch { print(error) }
  • @LeoDabus 感谢您指出这一点。这是一个错字。我打算写try 而不是try?

标签: swift error-handling nsfilemanager foundation


【解决方案1】:

可能如下所示(在CocoaError 的文档中查看更多与文件相关的常量)

do {
    let inode = try FileManager.default.attributesOfItem(atPath: somePath)[.systemFileNumber]
} catch CocoaError.fileNoSuchFile {
    print("Error: no such file exists")
} catch CocoaError.fileReadNoPermission {
    print("Error: you don't have permissions")
} catch {
    // something unknown
}

【讨论】:

  • 谢谢!我读了CocoaErrordocumentationsource,但他们没有解释rawValues 是什么。每个rawValue背后有什么含义,还是只是区分错误的代码?
  • @Wowbaggerandhisliquidlunch,在大多数情况下,您不需要 rawValue,命名代码就是所描述的,主要是自我描述的。如果出于任何原因发生了一些未命名的代码,则需要catch let error as NSError,即。通用方式,并从那里读取域和代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
  • 2019-06-13
  • 2021-06-17
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多