FileManager "File exists" 复制文件时

FileManager "File exists" when copying files

我正在尝试将文件 (audioFile) 复制到 DestinationURl,但是当我这样做时出现此错误:

Unable to create directory Error Domain=NSCocoaErrorDomain Code=516 "“20200116183746+0000.m4a” couldn’t be copied to “Documents” because an item with the same name already exists." UserInfo={NSSourceFilePathErrorKey=/<app>/Documents/20200116183746+0000.m4a, NSUserStringVariant=(
    Copy
), NSDestinationFilePath=<appURL>/Documents/20200116183746+0000.m4a, NSUnderlyingError=0x600003c2d290 {Error Domain=NSPOSIXErrorDomain Code=17 "File exists"}}

这是我的代码

            let DirPath = DocumentDirectory.appendingPathComponent(self.txtName.text ?? "NA")
            do
            {
                try FileManager.default.createDirectory(atPath: DirPath!.path, withIntermediateDirectories: true, attributes: nil)
                print("\n\n\nAudio file: \(self.audioFile)\n\n\n")
                let desitationURl = ("\(DirPath!.path)/")
                try FileManager.default.copyItem(atPath: self.audioFile.path, toPath: desitationURl)
            }
            catch let error as NSError
            {
                print("Unable to create directory \(error.debugDescription)")
            }

我删除了 / on let desitationURl = ("(DirPath!.path)/"),我可以看到文件已经生成,文件夹也已生成,但是没有任何移动。

任何帮助将不胜感激

奥西亚

您需要指定目标文件的实际名称,而不仅仅是它将进入的目录。文件管理器实际上是在尝试将您的文件保存为目录名称。我还稍微清理了您的代码以使其更具可读性:

guard let dirURL = DocumentDirectory
    .appendingPathComponent(self.txtName.text ?? "NA") else { return }

if !FileManager.default.fileExists(atPath: dirURL.path) {
    do {
        try FileManager.default
             .createDirectory(atPath: dirURL.path, 
                              withIntermediateDirectories: true,
                              attributes: nil)
    } catch let error as NSError {
        print("Unable to create directory \(error.debugDescription)")
    }
}

print("\n\n\nAudio file: \(audioFile)\n\n\n")

let dstURL = dirURL.appendingPathComponent(audioFile.lastPathComponent)
do {
    try FileManager.default.copyItem(atPath: audioFile.path, toPath: dstURL.path)
} catch let error as NSError {
    print("Unable to copy file \(error.debugDescription)")
}