Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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中File.Replace和(File.Delete&x2B;File.Move)之间的区别#_C#_.net - Fatal编程技术网

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

C# C中File.Replace和(File.Delete&x2B;File.Move)之间的区别#,c#,.net,C#,.net,今天我遇到了一个奇怪的问题:自从应用程序的一年和几个版本/测试以来,以下代码已成功地用于将一个文件替换为另一个文件 File.Replace(path + ".tmp", path, null); 这在本地和UNC路径(网络共享)中都有效。但是今天,当我使用此代码替换UNC路径上的文件时,出现了以下错误(本地仍然有效): 进程无法访问该文件,因为其他进程正在使用该文件 当我使用以下代码而不是上面的代码时,它可以工作: File.Delete(path); File.Move(path + ".

今天我遇到了一个奇怪的问题:自从应用程序的一年和几个版本/测试以来,以下代码已成功地用于将一个文件替换为另一个文件

File.Replace(path + ".tmp", path, null);
这在本地和UNC路径(网络共享)中都有效。但是今天,当我使用此代码替换UNC路径上的文件时,出现了以下错误(本地仍然有效):

进程无法访问该文件,因为其他进程正在使用该文件

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

File.Delete(path);
File.Move(path + ".tmp", path);
所以我的问题是:

  • 这两段代码之间有什么区别
  • 可能是微软改变了“File.Replace”的工作方式吗
我正在Visual Studio 2010中使用.Net Framework 4.0

提前感谢。

这是关于
文件的。Replace()

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

根据

File.Replace将在以下情况下引发异常

  • 缺少目标文件
  • 源和目标位于不同的卷上

哪个文件.Delete,File.Move不会。谢谢你的回答。你是说因为我没有指定备份路径?我还是不明白。。。早些时候,它起了作用*编辑:我尝试了一个备份路径-仍然是相同的错误消息你没有碰巧在服务器上运行这些超级渴望的“安全工具”,搞砸了它们的“访问保护”或其他什么,对吗?每个服务器都会发生这种情况吗?它是否在某个特定日期停止工作?服务器在该时间点上发生了什么?thx为您提供答案:我们没有特殊的“über”安全工具,并且从一段时间以来一直没有更改基础设施。这个问题也出现在其他网络中的其他机器上。我不知道确切的日期,但我想说在2011年2月之前它已经工作了…
File.Replace
要求对源和目标都有读写权限,然后p/调用
ReplaceFile
。查看
ReplaceFile
上的文档以获取线索。我们只能猜测——它应该会起作用。正如Tergiver所说,该方法没有做任何特殊的事情。你确定你的代码(我想是写在*.tmp上的)关闭了那个文件吗?因为正如Tergiver所说,这两个文件都需要读写权限。第一。在这种方法发生任何事情之前。你的作者可能错过了一个机会?我想说的是:不要太关注目标文件。这两个都可能是问题所在(除非错误明确指向目标)。我检查了这两个文件上所有其他操作的dispose/close,没有-没有丢失dispose/close…因此,如果源和目标位于不同的卷上,它将引发异常?对于一个实现来说,这到底是什么。。。谢谢你的链接@数据核心
Replace
的目的是替换文件。使用“移动+删除”时,只需创建一个新文件。替换保留安全属性、备用数据流、文件ID、加密、压缩、,创建日期等。请注意,
File.Move
在卷之间工作的唯一原因是它通过返回到“复制+删除”来具体实现该功能-由于明显的原因,基础winapi MoveFile不允许在卷之间移动文件(在一个卷上移动文件是更改文件路径的行为,不涉及复制)。