【发布时间】:2011-05-13 09:37:44
【问题描述】:
今天我遇到了一个奇怪的问题:自从一年和应用程序的多个版本/测试以来,以下代码已成功用于将文件替换为另一个文件。
File.Replace(path + ".tmp", path, null);
这在本地和 UNC 路径(网络共享)上都有效。但是今天当我使用此代码替换 UNC 路径上的文件时出现以下错误(本地仍然有效):
该进程无法访问该文件,因为它正被另一个进程使用
当我使用以下代码而不是上面的代码时,它可以工作:
File.Delete(path);
File.Move(path + ".tmp", path);
所以我的问题:
- 这两个代码sn-ps有什么区别?
- 难道是微软改变了“File.Replace”的工作方式?
我将 .Net Framework 4.0 与 Visual Studio 2010 一起使用。
提前致谢。
【问题讨论】:
-
您不会碰巧在服务器上运行这些超级渴望的“安全工具”之一,弄乱它们的“访问保护”或其他东西,对吧?每个服务器都会发生这种情况吗?它是否在特定日期停止工作以及 - 在那个时间点服务器上发生了什么?
-
感谢您的回答:我们没有特殊的“über”安全工具,并且有一段时间没有更改基础架构。该问题也出现在其他网络中的其他机器上。我不知道确切的日期,但我会说在 2011 年 2 月之前它已经起作用了......
-
File.Replace要求对源和目标都具有读写权限,然后 p/invokesReplaceFile。检查ReplaceFile上的文档以获取线索。 msdn.microsoft.com/en-us/library/aa365512.aspx -
我们只能猜测 - 它应该可以工作。正如 Tergiver 所说,该方法并没有做任何特别的事情。并且您确定您的代码(我假设是写入 *.tmp)关闭了该文件?因为正如 Tergiver 所说,再次请求 两个文件 的读写权限。第一的。在该方法发生任何事情之前。可能为您的作家错过了一次处置?我想说的是:不要过分关注目标文件。两者都可能是问题所在(除非错误明确涉及目标)。
-
我检查了我对这两个文件的所有其他操作的处置/关闭,没有 - 没有丢失处置/关闭...