Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 重命名现有文件名_C#_.net_File Io - Fatal编程技术网

C# 重命名现有文件名

C# 重命名现有文件名,c#,.net,file-io,C#,.net,File Io,我有下面的代码,它将一个文件复制到一个特定的文件夹,然后重命名它。 当具有该名称的文件已存在时,我会出现以下异常: Cannot create a file when that file already exists 有没有办法覆盖文件并重命名它?或者我应该删除旧的,然后更改名称 这是我的密码: File.Copy(FileLocation, NewFileLocation, true); //Rename: File.Move(Path.Combine(NewFileLocation,

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

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"));               
尽量只使用:

if (File.Exists("newfilename"))
{
    System.IO.File.Delete("newfilename");
}

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

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

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

类似的方法应该可以使用。

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

步骤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")); 
如果文件名已经存在,您将抛出一个
IOException
。因此,为了克服这一问题,您可以在移动前执行快速检查。e、 g

if (File.Exists(destinationFilename))
{
    File.Delete(destinationFilename);
}
File.Move(sourceFilename, destinationFilename);
我总是与标志MOVEFILE\u REPLACE\u EXISTING一起使用

限制:

  • 它需要使用PInvoke,因此这意味着您的代码只能在Windows平台上工作

  • 此标志MOVEFILE\u REPLACE\u现有仅适用于文件(不适用于文件夹)

  • 如果lpNewFileName或lpExistingFileName指定一个目录,并且lpExistingFileName存在,则会报告错误


    为什么要删除旧的?Move应该将其重命名为“原地”。正如Jeff所说,为什么要删除它?为什么不重命名它或者给你的新文件增加一个名字呢@PaulZahra我认为他的意思是删除任何现有的文件,但这在帖子中并不清楚。请不要编辑你的代码来获得答案,没有这个答案已经够让人困惑的了,但现在看起来你已经问了一个问题,而这个问题已经包含了答案,甚至更让人困惑!在将答案放入问题时,至少要将其标记为编辑。这没有帮助-当尝试将文件移动到存在同名文件的文件夹时,会出现异常失败。事实上,这与OP的尝试相同。您不需要使用该文件。请在之前复制。@LucasabileDB:如果文件已存在,您将收到
    IOException
    (请参阅)。但不要以为它会成功。先验检查是一种优化,但不是很好的控制。当然,根据用例,没有任何东西可以保证在移动时没有目标文件。