我们正在尝试在一个.NET 2.0应用程序(C#)中将文件从服务器复制到本地机器,但源文件仍然被锁定。我们怀疑是文件服务器上的某些配置导致了这种行为,但不确定具体原因... 你能帮助我们吗?
文件复制操作完成后,文件服务器(Windows 2K3 R2)报告源文件正在被读取锁定,即使在服务器上已经没有进行进一步的操作。该锁定会在应用程序退出时释放。
我们能够重现这个问题,即使只使用下面最基本的代码:
文件复制操作完成后,文件服务器(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()
执行期间立即发生锁定,且在此行执行完后仍持续存在。在更复杂的应用程序中,当具有 File.Copy()
的例程退出(但应用程序仍在运行)时,锁定仍然存在。
仅当整个应用程序完成后,锁定才会被释放。
将 sourceFile
更改为使用映射驱动器而不是 UNC 路径对行为没有影响。
当源文件位于另一个服务器上或本地位置时,不会发生此行为。
如果在 File.Copy()
后添加以下行,则立即释放锁定:
new System.Security.Permissions.FileIOPermission(System.Security.Permissions.FileIOPermissionAccess.Read, new string[] { sourceFile }).Demand();
根据我们的看法,这一切听起来像是服务器上有某些东西导致了这种行为。我们在服务器上安装了ShadowProtect和McAfee杀毒软件。除此之外,似乎没有其他安装Windows Server及其组件外的内容。
我们也不确定为什么在文件上要求读取权限会解决问题。
如果您能回答以下这些问题,我们将非常感谢:
- 是什么原因导致文件锁定持续存在?
- 为什么要求读取权限可以解决问题?