【问题标题】:How is it possible to create directories inside your application directory in iOS?如何在 iOS 的应用程序目录中创建目录?
【发布时间】:2021-09-06 04:14:01
【问题描述】:

我尝试在我的应用目录中创建一个目录,但出现以下错误:

致命错误:“试试!”表达式意外引发错误:错误域 = NSCocoaErrorDomain 代码 = 513“您无权将文件“某些”保存在文件夹“97391D11-283C-49FA-9A2B-8F8E2BBD89EE”中。” UserInfo={NSFilePath=/var/mobile/Containers/Data/Application/97391D11-283C-49FA-9A2B-8F8E2BBD89EE/Some/, NSUnderlyingError=0x2819c2df0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not allowed"}}:文件 VocalTraineriOS /VocalTrainerApp.swift,第 37 行

这是我的代码:

try! FileManager.default.createDirectory(atPath: NSHomeDirectory() + "/Some/", withIntermediateDirectories: true)

【问题讨论】:

  • 你必须用 FileManager 的url(for:in:appropriateFor:create:) 获取 home 目录(实际上是 Documents 目录)
  • 您不能在应用程序目录中创建文件夹。但是这些是什么类型的文件?从互联网上下载的东西或其他可以在以后轻松重新创建的文件?然后缓存文件夹可能是正确的,以便系统可以在设备空间不足时恢复该存储。如果应用程序的正确运行需要一些支持文件,那么应用程序支持目录是正确的。或者它是一些面向外部的文件,在这种情况下文档文件夹是有意义的。

标签: ios nsfilemanager


【解决方案1】:

您可以尝试在.documentDirectory 中创建一个文件夹,如下所示。

do {
    let fileManager = FileManager.default
    let documentsDirectory = try fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
    let someFolderURL = documentsDirectory.appendingPathComponent("Some")
    try fileManager.createDirectory(at: someFolderURL, withIntermediateDirectories: true, attributes: nil)
    print(someFolderURL)
} catch {
    print(error)
}

文档目录 URL 具有这种格式 -

"file:///var/mobile/Containers/Data/Application/FB12D808-9054-4799-9C69-115ACD805A24/Documents/"

【讨论】:

  • 不,拜托,字符串路径相关的 API 在 Swift 中已经过时且不鼓励使用。
  • 感谢@vadian 的建议。我已经更新了使用URL based api的答案。
  • 我也不认为“Documents”文件夹是正确的位置。这完全取决于这些目录中的文件类型。
猜你喜欢
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
  • 2012-03-09
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多