NSFileManager fileExistsAtPath 无法覆盖 Swift 中的现有文件 2

NSFileManager fileExistsAtPath unable to overwrite existing file in Swift 2

您好,我正在将现有代码升级到 Swift 2,我需要一些有关 DocumentDirectoy 中文件副本的帮助。

这是我用来检查文件是否存在的转换代码,如果存在,我们应该以任何一种方式复制它,但它一直返回一个错误,说文件存在,这是真的,但我们需要覆盖它。

func copyXMLFile()
    {
    // Get a reference for the Document directory
    let rootPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, .UserDomainMask, true)[0] 
    // Get a reference for the data.xml file
    xmlPathInDocument = rootPath.stringByAppendingString("data.xml")
    if NSFileManager.defaultManager().fileExistsAtPath(xmlPathInDocument){
        print("xml file exists")

                let xmlPathInBundle = NSBundle.mainBundle().pathForResource("data", ofType: "xml")!
        do {
            // copy file from main bundle to documents directory
            print("copy")
            try NSFileManager.defaultManager().copyItemAtPath(xmlPathInBundle, toPath: xmlPathInDocument)
        } catch let error as NSError {
            // Catch fires here, with an NSErrro being thrown
            print("error occurred, here are the details:\n \(error)")
        }
    }
    else
    {
        // copy the file either way

        let xmlPathInBundle = NSBundle.mainBundle().pathForResource("data", ofType: "xml")!
        do {
            // copy file from main bundle to documents directory
            print("copy")
            try NSFileManager.defaultManager().copyItemAtPath(xmlPathInBundle, toPath: xmlPathInDocument)
        } catch let error as NSError {
            // Catch fires here, with an NSErrro being thrown
            print("error occurred, here are the details:\n \(error)")
        }

    }

 }

发生错误,详情如下:

Error Domain=NSCocoaErrorDomain Code=516 "The operation couldn’t be completed. (Cocoa error 516.)" UserInfo=0x7a67b680 {NSSourceFilePathErrorKey=/Users/User1/Library/Developer/CoreSimulator/Devices/0E591E5B-2E2F-4CCB-9099-95CE1EA3F557/data/Containers/Bundle/Application/E3C8FAE4-703D-46CA-AC37-A1C96A74E6BE/myApp.app/data.xml, NSUserStringVariant=( Copy ), NSFilePath=/Users/User1/Library/Developer/CoreSimulator/Devices/0E591E5B-2E2F-4CCB-9099-95CE1EA3F557/data/Containers/Bundle/Application/E3C8FAE4-703D-46CA-AC37-A1C96A74E6BE/myApp.app/data.xml, NSDestinationFilePath=/Users/User1/Library/Developer/CoreSimulator/Devices/0E591E5B-2E2F-4CCB-9099-95CE1EA3F557/data/Containers/Data/Application/09F690B3-BDD8-4482-ADDE-E33F30D4B873/Documentsdata.xml, NSUnderlyingError=0x7a67dd80 "The operation couldn’t be completed. File exists"}

请帮助!

实现NSFileManagerDelegate和委托方法

optional func fileManager(_ fileManager: NSFileManager,
  shouldProceedAfterError error: NSError,
        copyingItemAtURL srcURL: NSURL,
                   toURL dstURL: NSURL) -> Bool

和returntrue

或者您可以使用

func replaceItemAtURL(_ originalItemURL: NSURL,
               withItemAtURL newItemURL: NSURL,
          backupItemName backupItemName: String?,
                        options options: NSFileManagerItemReplacementOptions,
          resultingItemURL resultingURL: AutoreleasingUnsafeMutablePointer<NSURL?>) throws