重命名现有文件名
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 应用程序,现有数据?