FileManager.copyItem(at:URL,to:URL)失败而不会抛出错误

时间:2017-08-08 13:09:17

标签: swift cocoa nsfilemanager

我注意到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环境变量相关的系统错误。

0 个答案:

没有答案