2009-03-02 169 views
21

我們正試圖將文件從一臺服務器在.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及其組件之上。

我們也不確定爲什麼要求文件的讀取權限可以解決問題。

如果你能回答這些問題,我們將不勝感激:

  1. 是什麼原因造成的文件鎖定堅持?
  2. 爲什麼要求讀取權限解決問題?
+0

更新:此問題不再可重現。它似乎已經解決了。我們無法確認邁克菲是否也造成了這個問題(但這可能與我們調查時解決問題有關)。 – Jayden 2009-03-18 21:59:34

+1

@Jarden:我和File.Copy有同樣的問題。如果File.Copy()之後的下一個語句是Delete - 它報告訪問異常。問題發生的不確定性,但上面的Demand()方法解決了這個問題。據我所見,這個問題是獨立於防病毒軟件的。 – PanJanek 2010-04-28 13:35:49

回答

4

這可能是McAfee訪問掃描程序擁有鎖。如果您只使用讀取權限,則會被繞過。我相信你可以使用Sysinternals Process Viewer工具(免費從Microsoft)來確認。

不知道你有什麼訂購邁克菲,但你可以定義例外規則,以便它不會掃描該文件。

0

我無法在我們的文件服務器上覆制它。

不過,我知道機會鎖定,因爲我們使用的是由PeerLock禁用PeerSoftware。