文件“XXX”不存在

时间:2016-10-17 11:50:23

标签: ios swift xcode nsfilemanager

我正在尝试使用Foreground网络操作下载文件。它成功下载但问题是目录中不存在文件

代码:

   let urlString = "https://joycemusic1.files.wordpress.com/2015/07/fight-song-rachel_platten.pdf"
        let filePath = "Documents/"

        if let url = NSURL(string: urlString){

            let tast = NSURLSession.sharedSession().downloadTaskWithURL(url, completionHandler: { (NSURL, NSURLResponse, NSError) in
                if let error = NSError{
                    print(error)
                }
                if let locationString = NSURL , let fileLocation = locationString.path {

                    //print(fileLocation)

                    let fileExists = NSFileManager().fileExistsAtPath("fight-song-rachel_platten.pdf")

                    if fileExists == true{
                       try! NSFileManager.defaultManager().moveItemAtPath(fileLocation, toPath: filePath)
                    }
                }
            })
            tast.resume()
        }

下载文件路径是:

  

/Users/twilight/Library/Developer/CoreSimulator/Devices/80CCC33B-817F-46C7-A65E-2B1CAA86D940/data/Containers/Data/Application/43CB754B-4096-47B1-9A97-32D1657E426B/tmp/CFNetworkDownload_EoIzdN.tmp < / p>

找不到文件

enter image description here

2 个答案:

答案 0 :(得分:2)

有两个主要错误。

  • 您必须检查文件是否存在于fileLocation

    let fileExists = NSFileManager().fileExistsAtPath(fileLocation)
    
  • 文件路径Documents/根本不存在。您必须使用

    获取沙箱中文档文件夹的URL
    let documentsURL = try! FileManager.default.url(for: .documentDirectory, 
                                                     in: .userDomainMask, 
                                         appropriateFor: nil, 
                                                 create: false)
    

    (对不起,这是Swift 3代码)

  • 与错误无关,但在打印错误后写入return以退出完成块。

从不使用班级名称NSURLNSURLResponseNSError作为变量名称,使用urlresponse,{ {1}}而不是。

答案 1 :(得分:0)

对于Swift 4.0 |使用以下代码:

  • 您必须检查文件是否存在于fileLocation

    let fileExists : Bool = FileManager.default.fileExists(atPath: fileLocation)
    
  • 文件路径Documents /根本不存在。您必须使用

    获取沙箱中documents文件夹的URL
    let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    
    let dataPath = documentsDirectory.appendingPathComponent(fileLocation)