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