如何解决强制 FileManager().copyItem(_:_) 超时
我正在使用
try FileManager.default.copyItem(at: inFile,to: outFile)
问题在于它是一个存在问题的网络上的大文件,并且由无人值守的东西完成。我希望能够告诉 FileManager 只需要一分钟来完成复制,否则就不行了。
我在文档中似乎找不到它,我的冰福今天很弱。
解决方法
我最终使用 dispatchWorkItem 和自定义错误结构扩展了 FileManager。
public extension FileManager {
struct TimeoutError:Error{
let source:URL
let destination:URL
let timeOut:Double
}
func timedOutCopy(at source:URL,to destionation:URL,timeOut:Double = 15.0) throws {
var cpError:Error?
let d = DispatchWorkItem(block: {
do {
try self.copyItem(at: source,to: destionation)
} catch {
cpError = error
}
})
DispatchQueue.global().async(execute: d)
if d.wait(wallTimeout: DispatchWallTime.now() + timeOut) != .success {
d.cancel()
throw TimeoutError(source: source,destination: destionation,timeOut: timeOut)
} else {
if let cpError = cpError {throw cpError}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。