Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将文档目录中的文件复制到文档目录中的目录时出错_Ios_Nsfilemanager - Fatal编程技术网

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

Ios 将文档目录中的文件复制到文档目录中的目录时出错,ios,nsfilemanager,Ios,Nsfilemanager,我试图将documents目录中的文件复制到documents目录中的某个目录,但遇到一个错误,无法复制到“documents”,因为已存在同名项。 任何帮助都将不胜感激 这是我的密码: let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]) let logsPath = documen

我试图将documents目录中的文件复制到documents目录中的某个目录,但遇到一个错误,无法复制到“documents”,因为已存在同名项。

任何帮助都将不胜感激

这是我的密码:

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

做这件事的方法不止一种。 最简单的方法是在复制目标文件之前将其删除:

try! NSFileManager.removeItemAtURL(dstURL)
您可能希望通过实现
NSFileManagerDelegate
,在一个地方处理所有文件管理错误:

  • 设置
    NSFileManager()。将
    委托给您的类(复制文件的位置)
  • 拦截实现某个委托方法时发生的错误。根据错误,您可以执行不同的恢复操作。返回
    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)
    }
}

做这件事的方法不止一种。 最简单的方法是在复制目标文件之前将其删除:

try! NSFileManager.removeItemAtURL(dstURL)
您可能希望通过实现
NSFileManagerDelegate
,在一个地方处理所有文件管理错误:

  • 设置
    NSFileManager()。将
    委托给您的类(复制文件的位置)
  • 拦截实现某个委托方法时发生的错误。根据错误,您可以执行不同的恢复操作。返回
    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)
    }
}