我正在构建一个iOS应用程序,用户可以在其中下载不同的文件.
我正在使用an URLSessionDownloadTask和an URLSession异步下载文件.
下载完成后,目标文件夹默认为tmp/目录.
因此,当下载结束时,我需要将临时文件移动到另一个目录.
对于图片或歌曲,这只需要1秒甚至更短.
但是,当文件是视频时,最多可能需要15秒.
为了让用户仍然可以与应用程序进行交互,我想让这个移动异步.
每次我尝试这样做时,文件管理器都会抛出异常.
"CFNetworkDownload_xxxxxx.tmp"无法移动到"下载",因为前者不存在,或者包含后者的文件夹不存在.
我试图在后台线程中调用文件管理器,它会抛出.
我尝试在调用move方法之前删除目标文件,以确保该文件尚不存在.
copy在从tmp/目录中删除文件之前,我尝试调用该函数.
对文件管理器的调用看起来像那样.
func simpleMove(from location: URL, to dest: URL) -> Bool {
let fileManager = FileManager.default
do {
try fileManager.moveItem(at: location, to: dest)
return true
} catch {
print("\(error.localizedDescription)")
return false
}
}
Run Code Online (Sandbox Code Playgroud)
当我把它放在后台线程中时,我这样做.
DispatchQueue.global().async {
if !simpleMove(from: location, to: dest) {
//Failure
}
}
Run Code Online (Sandbox Code Playgroud)
如何在不影响UI的情况下移动真正大的文件?
将文件直接下载到永久目录中是一种更好的解决方案.我怎样才能做到这一点?
当我simpleMove(from:to:)同步拨打电话时,它完美无缺.
那么,为什么错误说目标目录不存在?(或类似的东西,我不确定该错误的含义)
谢谢.
上面的代码是用Swift 3编写的,但是如果你有Objective-C或Swift 2的答案,也可以 …