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

时间:2011-05-13 09:37:44

标签: c# .net

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

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

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

  

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

使用

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

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

所以我的问题:

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

我正在使用.Net Framework 4.0和Visual Studio 2010。

提前致谢。

3 个答案:

答案 0 :(得分:5)

根据MSDN on File.Replace

File.Replace会在......

时抛出异常
  • 目标文件丢失。
  • 源和目标位于不同的卷上

哪个File.Delete,File.Move赢了

答案 1 :(得分:4)

以下是File.Replace()

上的MSDN article

创建原始备份似乎不同。

答案 2 :(得分:0)

using System;
using System.IO;

namespace FileSystemExample
{

class FileExample
{

    public static void Main()
    {
        try
        {

            string OriginalFile = path+"test.tmp";
            string FileToReplace = path+"test2.tmp";
            string BackUpOfFileToReplace = path+"test2.tmp.bac";


            Console.WriteLine("Move the contents of " + OriginalFile + " into " + FileToReplace + ", delete " + OriginalFile +
                               ", and create a backup of " + FileToReplace + ".");

            // Replace the file.
            ReplaceFile(@OriginalFile, @FileToReplace, @BackUpOfFileToReplace);

            Console.WriteLine("Done");
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }

        Console.ReadLine();
    }

    // Move a file into another file, delete the original, and create a backup of the replaced file.
    public static void ReplaceFile(string FileToMoveAndDelete, string FileToReplace, string BackupOfFileToReplace)
    {
        File.Replace(FileToMoveAndDelete, FileToReplace, BackupOfFileToReplace, false);

    }
}

}