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

时间:2015-09-04 17:53:31

标签: ios iphone swift2 nsfilemanager xcode7

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

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

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)")
        }

    }

 }

发生了错误,以下是详细信息:

  

错误域= NSCocoaErrorDomain代码= 516“操作无法执行   完成。 (可可错误516.)“UserInfo = 0x7a67b680   {NSSourceFilePathErrorKey = /用户/用户1 /库/开发商/ CoreSimulator /设备/ 0E591E5B-2E2F-4CCB-9099-95CE1EA3F557 /数据/容器/捆绑/应用/ E3C8FAE4-703D-46CA-AC37-A1C96A74E6BE / myApp.app /数据。 XML,   NSUserStringVariant =(       复制),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 = /用户/用户1 /库/开发商/ CoreSimulator /设备/ 0E591E5B-2E2F-4CCB-9099-95CE1EA3F557 /数据/容器/数据/应用/ 09F690B3-BDD8-4482-ADDE-E33F30D4B873 / Documentsdata.xml,   NSUnderlyingError = 0x7a67dd80“操作无法完成。   文件存在“}

请帮助!

1 个答案:

答案 0 :(得分:2)

实施NSFileManagerDelegate和委托方法

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

并返回true

或者你可以使用

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