我有以下代码将文件复制到特定文件夹然后重命名。 当具有该名称的文件已存在时,我得到以下异常:
Cannot create a file when that file already exists
有没有办法覆盖文件并重命名?或者我应该删除旧的,然后更改名称?
这是我的代码:
File.Copy(FileLocation, NewFileLocation, true);
//Rename:
File.Move(Path.Combine(NewFileLocation, fileName), Path.Combine(NewFileLocation, "File.txt"));
答案 0 :(得分:24)
尝试仅使用:
if (File.Exists("newfilename"))
{
System.IO.File.Delete("newfilename");
}
System.IO.File.Move("oldfilename", "newfilename");
答案 1 :(得分:9)
一个简单的选项是删除文件(如果存在):
if (System.IO.File.Exists(newFile)) System.IO.File.Delete(newFile);
System.IO.File.Move(oldFile, newFile);
这样的事情应该有用。
答案 2 :(得分:5)
你是对的,File.Move
如果/当文件名已存在时会抛出IOException
。因此,为了克服这一点,您可以在移动前进行快速检查。 e.g。
if (File.Exists(destinationFilename))
{
File.Delete(destinationFilename);
}
File.Move(sourceFilename, destinationFilename);
答案 3 :(得分:3)
您应该使用File.Exists
而不是让Exception抛出。然后,您可以处理文件是否应该被覆盖或重命名。
答案 4 :(得分:2)
步骤1:作为第一步,在复制文件之前识别文件是否存在。
使用File.Exists()
方法
步骤2:如果文件已存在且名称相同,则使用File.Delete()
方法删除现有文件
第3步:现在使用File.Copy()
方法将文件复制到新位置。
第4步:重命名新复制的文件。
试试这个:
string NewFilePath = Path.Combine(NewFileLocation, fileName);
if(File.Exists(NewFilePath))
{
File.Delete(NewFilePath);
}
//Now copy the file first
File.Copy(FileLocation, NewFileLocation, true);
//Now Rename the File
File.Move(NewFilePath, Path.Combine(NewFileLocation, "File.txt"));
答案 5 :(得分:0)
我总是使用带有标志 MOVEFILE_REPLACE_EXISTING 的 MoveFileEx。
限制:
它需要使用 PInvoke,所以这意味着你的代码只能在 Windows 平台上运行。
此标志 MOVEFILE_REPLACE_EXISTING 仅适用于文件(不适用于文件夹)
如果 lpNewFileName 或 lpExistingFileName 命名目录并且 lpExistingFileName 存在,则报告错误。