【问题标题】:Unable to save file to local storage in ios swift无法在ios swift中将文件保存到本地存储
【发布时间】:2019-01-23 01:51:58
【问题描述】:

我正在尝试从服务器下载文件内容,在客户端创建一个文件并将所有内容传输到该文件。我正在将文件保存到本地存储,但无法保存会抛出您无权保存在文件夹中的异常。尝试了很多东西,但无法做到。我对这个 ios 编程很陌生。请帮帮我,提前谢谢。

下面是我的代码:

 let documentsUrl =  FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
 var fileURL : URL = URL(fileURLWithPath: documentsUrl!.path+filename)
  fileURL = URL(fileURLWithPath: documentsUrl!.path+filename+".doc")
  let data = NSData(contentsOf: tempLocalUrl)
                do {
                    try data?.write(to: fileURL, options: .atomic)
                } catch {
                    print(error,"helooooooooooooooooo")
                }

我用过relativepath、absolutestring但还是不行。

这是错误:

Error Domain=NSCocoaErrorDomain Code=513 "您没有权限将文件 "DocumentsImport From IE.doc" 保存在文件夹 "0103E60B-478F-475B-A8F2-788534F5D206" 中。" UserInfo={NSFilePath=/var/mobile/Containers/Data/Application/0103E60B-478F-475B-A8F2-788534F5D206/DocumentsImport From IE.doc, NSUnderlyingError=0x1076efe90 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not allowed"}}

【问题讨论】:

  • documentsUrl 来自哪里?您是如何提取该网址的?
  • 我已经编辑了代码,请检查@holex
  • 我相信你已经发现了路径和文件名之间缺少的/...比如.../Documents + / + Import From IE.doc,你目前没有@ 987654328@ - 最好使用addPathComponent(...) 而不是连接原始字符串值...这可以帮助您避免将来出现此类故障。
  • 永远不要连接字符串来构建路径。使用适当的 URL API。这解决了您的问题。
  • 感谢@holex 它有效,您节省了我的时间。

标签: ios swift swift3 ios7


【解决方案1】:

我这样保存我的图像

 let fileManager = FileManager.default
 do {

     let documentDirectory = try fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor:nil, create:false)
     let fileURL = documentDirectory.appendingPathComponent(name)
     let image = #imageLiteral(resourceName: "Notifications")if let imageData = UIImageJPEGRepresentation(image, 0.5) {
         try imageData.write(to: fileURL)
         return true  
     }
 } catch {   
    print(error) 
 }

【讨论】:

    【解决方案2】:

    永远不要像

    那样构建路径
    documentsUrl!.path+filename+".doc"
    

    不要那样做。您可能会忘记实际使用的路径分隔符。

    URL 有专门的 API 来构建路径

    let documentsUrl =  FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    let fileURL = documentsUrl.appendingPathComponent(filename).appendingPathExtension("doc")
    do {
        let data = try Data(contentsOf: tempLocalUrl) // not NSData !!
        try data.write(to: fileURL, options: .atomic)
    } catch {
        print(error,"helooooooooooooooooo")
    }
    

    【讨论】:

      【解决方案3】:

      你在错误中的路径是:

      /var/mobile/Containers/Data/Application/0103E60B-478F-475B-A8F2-788534F5D206/DocumentsImport From IE.doc
      

      代替:

      /var/mobile/Containers/Data/Application/0103E60B-478F-475B-A8F2-788534F5D206/Documents/Import From IE.doc
      

      并使用appendingPathComponent 连接路径元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-31
        • 1970-01-01
        • 2021-12-25
        • 1970-01-01
        • 2016-02-18
        • 2021-03-19
        • 1970-01-01
        • 2020-05-07
        相关资源
        最近更新 更多