重命名现有文件名

时间:2014-02-25 13:15:27

标签: c# .net file-io

我有以下代码将文件复制到特定文件夹然后重命名。 当具有该名称的文件已存在时,我得到以下异常:

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

6 个答案:

答案 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_EXISTINGMoveFileEx

限制:

  1. 它需要使用 PInvoke,所以这意味着你的代码只能在 Windows 平台上运行。

  2. 此标志 MOVEFILE_REPLACE_EXISTING 仅适用于文件(不适用于文件夹)

<块引用>

如果 lpNewFileName 或 lpExistingFileName 命名目录并且 lpExistingFileName 存在,则报告错误。