我注意到FileManager
移动和复制项目的方法表现不同。如果fileManager.moveItem(at: src, to: dst)
目录具有不可变属性,则dst
抛出错误:
错误域= NSCocoaErrorDomain代码= 513"由于您无权访问“dst”,因此无法移动“src”。" UserInfo = {NSSourceFilePathErrorKey = dst,NSUserStringVariant =( 移动 ),NSDestinationFilePath = dst,NSFilePath = src,NSUnderlyingError = 0x108b0e190 {错误域= NSPOSIXErrorDomain代码= 1"操作不被允许"}}
相反fileMangaer.copyItem(at: src, to: dst)
不会抛出任何错误。它只是输出来控制消息:
在dst上打开:不允许操作
是否有任何方法可以通过更好的错误处理来复制文件?
在macOS 10.12.5上运行
UPD:
代码示例:
let dir = "/private/tmp/file-manager-test"
let file = "/private/tmp/file1"
do {
try FileManager.default.createDirectory(atPath: dir, withIntermediateDirectories: true, attributes: nil)
FileManager.default.createFile(atPath: file, contents: Data(), attributes: nil)
try FileManager.default.setAttributes([.immutable: true], ofItemAtPath: dir)
let fname = (file as NSString).lastPathComponent
let dst = (dir as NSString).appendingPathComponent(fname)
try FileManager.default.copyItem(atPath: file, toPath: dst)
} catch let e {
print("\(e)")
}
它在游乐场中按预期工作。但是如果你在applicationDidFinishLaunching()
方法中运行此代码,你将看到没有例外。
UPD2:
我在OpenRadar上发现了类似的案例:https://openradar.appspot.com/32083596
看起来这是与OS_ACTIVITY_DT_MODE
环境变量相关的系统错误。