重命名现有文件名

Posted

技术标签:

【中文标题】重命名现有文件名【英文标题】:Rename existing file name 【发布时间】:2014-03-27 17:51:53 【问题描述】:

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

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

【问题讨论】:

为什么要删除旧的?移动应将其重命名为“就地”。 ***.com/questions/3218910/rename-a-file-in-c-sharp 正如杰夫所说,为什么要删除它?为什么不重命名它或给你的新文件一个增量名称? ***.com/questions/13049732/… @PaulZahra 我认为他的意思是删除任何现有文件,但从帖子中并不清楚。 请不要编辑你的代码来得到你的答案,没有这个就足够令人困惑了,但现在看起来你已经问了一个问题并且问题已经包含了答案,更令人困惑!将您的答案放入您的问题时,至少将其标记为编辑。 【参考方案1】:

尝试仅使用:

if (File.Exists("newfilename"))

    System.IO.File.Delete("newfilename");


System.IO.File.Move("oldfilename", "newfilename");

【讨论】:

它没有帮助-尝试将文件移动到存在同名文件的文件夹时失败并出现异常。 确实,这和OP的尝试是一样的。 之前不需要使用 File.Copy。 @LucasAbilidebob:如果文件已经存在,你会收到IOException(见docs)。【参考方案2】:

一个简单的选择是删除文件(如果存在):

if (System.IO.File.Exists(newFile)) System.IO.File.Delete(newFile);
System.IO.File.Move(oldFile, newFile);

类似的东西应该可以工作。

【讨论】:

【参考方案3】:

你是对的,File.Move 将抛出 IOException 如果/当文件名已经存在。因此,要克服这一点,您可以在移动前进行快速检查。例如

if (File.Exists(destinationFilename))

    File.Delete(destinationFilename);

File.Move(sourceFilename, destinationFilename);

【讨论】:

当然,根据用例,没有什么可以保证在您移动时没有目标文件。【参考方案4】:

您应该使用File.Exists 而不是让异常抛出。然后,您可以处理文件是否应该被覆盖或重命名。

【讨论】:

但不要以为它会成功。先验检查是一种优化,但不是很好的控制。【参考方案5】:

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

【讨论】:

【参考方案6】:

我总是使用带有 MOVEFILE_REPLACE_EXISTING 标志的 MoveFileEx。

限制:

    它需要使用PInvoke,也就是说你的代码只能在Windows平台上运行。

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

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

【讨论】:

以上是关于重命名现有文件名的主要内容,如果未能解决你的问题,请参考以下文章

如何使用批处理文件重命名现有文件以进行备份?

重命名已部署到 MarketPlace 的 WP7 应用程序,现有数据?

将文件复制到另一个文件夹,在目的地重命名并覆盖现有文件

重命名项目路径后如何将现有项目添加到 Visual Studio 2012

在不破坏现有迁移的情况下重命名 Django 模型

HDF5:有没有办法重命名现有 HDF5 表中的列名?