C#中File.Replace和(File.Delete + File.Move)之间的区别

dat*_*ore 22 .net c#

今天我遇到了一个奇怪的问题:由于应用程序的一年和多个版本/测试,以下代码已成功用于替换另一个文件.

File.Replace(path + ".tmp", path, null);
Run Code Online (Sandbox Code Playgroud)

这在本地工作,也与UNC路径(网络共享)一起工作.但是今天我使用此代码替换UNC路径上的文件时出现以下错误(本地仍可正常工作):

该进程无法访问该文件,因为该文件正由另一个进程使用

当我使用以下代码而不是上述代码时,它可以工作:

File.Delete(path);
File.Move(path + ".tmp", path);
Run Code Online (Sandbox Code Playgroud)

所以我的问题:

  • 这两个代码片段有什么区别?
  • 可能是微软改变了'File.Replace'的工作方式吗?

我在Visual Studio 2010中使用.Net Framework 4.0.

提前致谢.

hul*_*ist 5

根据MSDN对File.Replace的说法

File.Replace会在...时抛出异常

  • 目标文件丢失.
  • 源和目标位于不同的卷上

哪个File.Delete,File.Move不会.

  • 所以如果源和目标位于不同的卷上,它会抛出异常吗?实际上到底是什么......感谢链接! (2认同)

Phi*_*ray 4

这是MSDN文章File.Replace()

创建原始文件的备份似乎是不同之处。