2015-09-04 60 views
1

你好我正在升级我的现有代码到Swift 2,并且我需要一些DocumentDirectoy中的文件副本的帮助。NSFileManager fileExistsAtPath无法覆盖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)") 
     } 

    } 

} 

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

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

请帮助!

回答

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 
+0

谢谢@vadian,第二个选项帮助! – AJ152

+0

当在iOS模拟器中测试我的应用程序时,复制文件过程正常,但是当我在我的设备iPhone上测试时,出现错误: '错误域= NSCocoaErrorDomain代码= 513“操作无法完成。 (Cocoa error 513.)“UserInfo = 0x17e8af80 {NSUnderlyingError = 0x17e89210”操作无法完成,操作不允许“,NSFilePath =/private/var/mobile/Containers/Bundle/Application/A44E5FF5-F52A-45E7-A803 -DB6A19F1DB82/myApp.app/data.xml' – AJ152

+0

这是因为我在使用Xcode 7 side load的iPhone上运行我的应用程序? @vadian – AJ152