将文档目录中的文件复制到文档目录中的目录时出错

Posted

技术标签:

【中文标题】将文档目录中的文件复制到文档目录中的目录时出错【英文标题】:Error When Copying A File in The Documents Directory To a Directory Within The Documents Directory 【发布时间】:2015-12-07 09:07:25 【问题描述】:

我正在尝试将文档目录中的文件复制到文档目录中的目录,但我收到错误无法复制到“文档”,因为已经有同名项目存在。

任何帮助将不胜感激。

这是我的代码:

let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0])
        let logsPath = documentsPath.URLByAppendingPathComponent("Logs")


        let fileURL = documentsPath.URLByAppendingPathComponent("Database.db")

        do 
            try       NSFileManager.defaultManager().copyItemAtURL(fileURL, toURL: logsPath)
         catch  let error1 as NSError
            RZLog.Error ("Error:  \(error1.localizedDescription)")
        

【问题讨论】:

【参考方案1】:

有不止一种方法可以做到这一点。 最简单的方法是在复制之前删除目标文件:

try! NSFileManager.removeItemAtURL(dstURL)

您可能希望通过实现NSFileManagerDelegate 在一个地方处理所有文件管理错误:

NSFileManager().delegate 设置为您的班级(复制文件的位置) 拦截实现委托方法之一的错误。根据错误,您可以做不同的事情来恢复。返回true 以继续,或返回false 以中止。

例子:

class AnyClass : NSFileManagerDelegate 
    let fileManager = NSFileManager()

    func fileManager(fileManager: NSFileManager, shouldProceedAfterError error: NSError, copyingItemAtURL srcURL: NSURL, toURL dstURL: NSURL) -> Bool 
        if error.code == NSFileWriteFileExistsError 
            try! fileManager.removeItemAtURL(dstURL)
            copyFrom(srcURL, to: dstURL)
            return true
         else 
            return false
        
    

    func copyFrom(a: NSURL, to b: NSURL) 
        try! fileManager.copyItemAtURL(a, toURL: b)
    

    func entryPoint() 
        fileManager.delegate = self
        copyFrom(sourceURL, to: destinationURL)
    

【讨论】:

以上是关于将文档目录中的文件复制到文档目录中的目录时出错的主要内容,如果未能解决你的问题,请参考以下文章

将文件夹从主包复制到 iphone 中的文档目录

是否可以将 UITests 目标中的文件复制到应用程序的文档目录中?

如何从ios中的文档目录复制不同类型的文件

iOS 将文件从主包复制到文档目录

前端探索 文件创建、复制与删除【Git】

如何从 iOS 的文档目录中复制所有文本文件?