我们正试图将文件从一台服务器在.NET 2.0的应用程序(C#)复制下来,到本地计算机,但保持其不必要地锁止源文件后,源文件。我们怀疑它是在文件服务器上配置的导致此行为的东西,但不确定...你能帮忙吗?File.Copy锁定完成
文件复制操作后,文件服务器(Windows 2K3 R2)的报告显示源文件正在举行一个读锁,即使没有进一步的操作与服务器上的文件来完成。锁定在应用程序退出后释放。
我们能够重现行为,甚至与下面的最基本的代码所示:
static void Main(string[] args)
{
string sourceFile = @"\\win2K3server\resource\Production\IQE\sourceFolder\iqeconsole.exe";
string destinationFile = @"d:\destinationFolder\iqeconsole.exe";
System.IO.File.Copy(sourceFile,destinationFile,true);
Console.ReadLine();
}
锁的File.Copy()
行执行时立即occurrs,这行结束后仍然存在。在更复杂的应用程序中,当存在File.Copy()
的例程(但应用程序仍在运行)时,该锁仍然存在。
只有当整个应用程序完成时,释放的锁。
更改sourceFile
使用映射驱动器,而不是UNC路径使得该行为没有什么区别。
当源文件位于另一台服务器上或位于本地时,不会发生此行为。
如果我们的File.Copy
后添加以下行,锁被立即释放:
new System.Security.Permissions.FileIOPermission(System.Security.Permissions.FileIOPermissionAccess.Read, new string[] { sourceFile }).Demand();
这一切听起来我们好像有导致此行为的服务器上的东西。我们在服务器上安装了ShadowProtect以及McAfee防病毒软件。除此之外,看起来好像没有别的东西安装在Windows Server及其组件之上。
我们也不确定为什么要求文件的读取权限可以解决问题。
如果你能回答这些问题,我们将不胜感激:
- 是什么原因造成的文件锁定坚持?
- 为什么要求读取权限解决问题?
更新:此问题不再可重现。它似乎已经解决了。我们无法确认迈克菲是否也造成了这个问题(但这可能与我们调查时解决问题有关)。 – Jayden 2009-03-18 21:59:34
@Jarden:我和File.Copy有同样的问题。如果File.Copy()之后的下一个语句是Delete - 它报告访问异常。问题发生的不确定性,但上面的Demand()方法解决了这个问题。据我所见,这个问题是独立于防病毒软件的。 – PanJanek 2010-04-28 13:35:49