【问题标题】:Using NSFileManager and createDirectoryAtPath in Swift在 Swift 中使用 NSFileManager 和 createDirectoryAtPath
【发布时间】:2023-03-21 06:25:01
【问题描述】:

我正在尝试创建一个新文件夹,但我不知道如何正确使用 createDirectoryAtPath。

根据文档,这是正确的语法:

NSFileManager.createDirectoryAtPath(_:withIntermediateDirectories:attributes:error:)

我试过了:

let destinationFolder: String = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let deliverablePath: NSURL = NSURL.fileURLWithPath("\(destinationFolder)/\(arrayOfProjectIDs[index])")!
NSFileManager.createDirectoryAtPath(deliverablePath, withIntermediateDirectories: false, attributes: nil, error: nil)

但这给了我错误

调用中的额外参数“withIntermediateDirectories”

我也尝试了很多变体,删除参数等等,但我无法让它在没有错误的情况下运行。有什么想法吗?

【问题讨论】:

    标签: ios swift nsfilemanager


    【解决方案1】:

    createDirectoryAtPath 需要 String 作为第一个参数,而不是 URL。尝试直接传递您的路径或使用 URL 友好的变体 createDirectoryForURL

    这是一个例子:

    NSFileManager.defaultManager().createDirectoryAtPath("/tmp/fnord", withIntermediateDirectories: false, attributes: nil, error: nil)

    【讨论】:

      【解决方案2】:

      您忘记添加 defaultManager() 并将 NSURL 转换为字符串。

      你可以试试替换

      NSFileManager.createDirectoryAtPath(deliverablePath, withIntermediateDirectories: false, attributes: nil, error: nil)

      用这个(将你的 NSURL 转换为字符串)

      var deliverablePathString = deliverablePath.absoluteString
      
      NSFileManager.defaultManager().createDirectoryAtPath(deliverablePathString, withIntermediateDirectories: false, attributes: nil, error: nil)
      

      希望对你有帮助

      【讨论】:

      • 如果您要创建一个 URL,使用createDirectoryForURL 是最有意义的。此外,如果您将 URL 的路径传递给期望您应该使用 fileSystemRepresentation,而不是 absoluteString 的函数。
      【解决方案3】:

      Swift 2.0 方式:

      do {
          var deliverablePathString = "/tmp/asdf"
          try NSFileManager.defaultManager().createDirectoryAtPath(deliverablePathString, withIntermediateDirectories: false, attributes: nil)
      } catch let error as NSError {
          NSLog("\(error.localizedDescription)")
      }
      

      【讨论】:

        【解决方案4】:

        基于上面seb的代码。 当我在我的函数中使用它时,我也必须添加一个通用的 catch。 这消除了“未处理从此处抛出的错误,因为封闭的 catch 不是详尽的”错误。

        do {
            var deliverablePathString = "/tmp/asdf"
            try NSFileManager.defaultManager().createDirectoryAtPath(deliverablePathString, withIntermediateDirectories: false, attributes: nil)
        } catch let error as NSError {
            NSLog("\(error.localizedDescription)")
        } catch {
            print("general error - \(error)", appendNewline: true)
        }
        

        【讨论】:

          猜你喜欢
          • 2011-06-22
          • 2013-02-21
          • 2014-09-01
          • 2021-12-15
          • 1970-01-01
          • 2015-12-18
          • 1970-01-01
          • 2015-01-11
          • 2014-12-10
          相关资源
          最近更新 更多