Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between File.Replace and (File.Delete+File.Move) in C#

Tags:

c#

.net

Today I ran into a strange problem: Since a year and several versions / tests of the application the following code has been used successfully to replace a file with an other.

File.Replace(path + ".tmp", path, null);

This has worked locally and also with UNC paths (network shares). But today I got the following error when I used this code to replace a file on a UNC path (local still works):

The process cannot access the file because it is being used by another process

When I use the following code instead of the above, it works:

File.Delete(path);
File.Move(path + ".tmp", path);

So my questions:

  • What is the difference between the two code snippets?
  • Could it be that Microsoft have changed the way 'File.Replace' works?

I'm using .Net Framework 4.0 with Visual Studio 2010.

Thanks in advance.

like image 700
dataCore Avatar asked May 13 '11 09:05

dataCore


2 Answers

According to MSDN on File.Replace

File.Replace will throw an exception when...

  • the destination file is missing.
  • source and destination are on different volumes

Which File.Delete, File.Move won't.

like image 80
hultqvist Avatar answered Nov 07 '22 22:11

hultqvist


Here's the MSDN article on File.Replace()

Creating a backup of the original appears to be the difference.

like image 22
Phil Murray Avatar answered Nov 07 '22 21:11

Phil Murray