【问题标题】:How to create a subdirectory using URLForDirectory?如何使用 URLForDirectory 创建子目录?
【发布时间】:2015-11-25 10:23:04
【问题描述】:

这就是我现在拥有的:

let path = try! NSFileManager.defaultManager().URLForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomain: NSSearchPathDomainMask.UserDomainMask, appropriateForURL: nil, create: true)

这是print(path)的输出:

file:///Users/kuna/Library/Developer/CoreSimulator/Devices/92BD140D-5C14-43C4-80D6-904BB9594ED6/data/Containers/Data/Application/CD9B3821-C536-4B46-B838-259490FD008E/Documents/

在该目录中,我需要创建images 子目录。

我应该执行什么代码来实现它?

文档中提到了apriopriateForURL

您要在其中创建唯一临时目录以用于自动保存文档或其他用途的目录的名称。

【问题讨论】:

    标签: ios swift nsfilemanager


    【解决方案1】:
    let path = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true)
    let imageURL = path?.URLByAppendingPathComponent("images")
    try! NSFileManager.defaultManager().createDirectoryAtURL(imageURL!, withIntermediateDirectories: true, attributes: nil)
    

    【讨论】:

      【解决方案2】:

      不使用参数appropriateForURL 传递.DocumentDirectory 作为目录参数。

      以传统方式进行:

      let fileManager = NSFileManager.defaultManager()
      do {
        let documentURL = try fileManager.URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true)
        let imageDirectoryURL = documentURL.URLByAppendingPathComponent("images")
        try fileManager.createDirectoryAtURL(imageDirectoryURL, withIntermediateDirectories: false, attributes: nil)
      } catch let error as NSError {
        if error.code == 516 {
          print("The directory already exists")
        } else {
          print(error)
        }
      }
      

      【讨论】:

      • 为什么不用 withIntermediateDirectories:true ?如果这是一个新安装的应用程序,并且中间目录尚不存在,则无需任何费用并且可以节省您的时间。您很可能不会测试。如果目录存在,也不会出现错误,这就是您想要的 - 您只是想确保它在调用之后就在那里。
      • 基本上你是对的,但是因为我们知道父目录安全存在,所以没有必要。并且将withIntermediateDirectories 设置为true 并不是完全免费的,该方法必须检查该目录是否真的存在。 Swift 的新概念之一是在编译时关心这些事情,以便在运行时获得更高性能的代码。
      猜你喜欢
      • 1970-01-01
      • 2010-10-20
      • 2019-02-28
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多