【问题标题】:File.Copy locks source file after completionFile.Copy 完成后锁定源文件
【发布时间】:2009-03-02 18:32:34
【问题描述】:

我们正在尝试将文件从服务器复制到 .NET 2.0 应用程序 (C#) 中的本地计算机,但源文件一直处于不必要的锁定状态。我们怀疑是文件服务器上配置的东西导致了这种行为,但不确定是什么......你能帮忙吗?

文件复制操作后,文件服务器 (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 及其组件之上没有安装其他任何东西。

我们也不确定为什么要求文件的读取权限可以解决问题。

如果您能回答这些问题,我们将不胜感激:

  1. 是什么导致文件锁定持续存在?
  2. 为什么要求读取权限可以解决问题?

【问题讨论】:

  • 更新:这个问题不再重现。它似乎已经解决了自己。我们也无法确认是 McAfee 导致了问题(但这可能与我们正在调查时解决问题有关)。
  • @Jarden:我对 File.Copy 也有同样的问题。如果 File.Copy() 之后的下一条语句是 Delete - 它报告访问异常。问题是不确定地发生的,但上面的 Demand() 方法解决了这个问题。据我所知,这个问题与防病毒软件无关。
  • 我有同样的问题,但肯定不是 McAfee,我正在运行 AVG,但我禁用了文件监视器。我正在使用 Unlocker 告诉我是什么锁定了文件,并且它同意它是我的应用程序。所以我猜陪审团还在外面!!但是实施您的解决方案解决了我的问题,所以我暂时很高兴

标签: .net file-locking


【解决方案1】:

持有锁的可能是 McAfee 按访问扫描程序。如果您只使用读取访问权限,则会绕过它。我相信您可以使用 Sysinternals Process Viewer 工具(Microsoft 免费提供)来确认这一点。

不确定您有哪些 McAfee 订阅,但您可以定义例外规则,使其不扫描此文件。

【讨论】:

  • 嗨。谢谢,我们目前正在对此进行调查。
  • 作为记录,我们无法确认这是使用 Process Viewer 的问题。这个问题似乎已经神秘地解决了,尽管我们的服务器人员说他们没有对服务器做任何事情!你的答案是“最好的”,所以给了你积分。感谢您的帮助。
  • 谢谢,但 McAfee 仍然是一个不错的选择,因为我经常在复制文件后遇到这个问题。我已经杀死了 McAfee On Access Scanner,然后我可以删除该文件。
【解决方案2】:

我无法在我们的文件服务器上复制它。

但是,我知道机会锁定已禁用,因为我们使用的是 PeerSoftware 的 PeerLock。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多