2012-08-15 35 views
6

程序在多臺共享網絡驅動器的計算機上運行。它可以使用找出誰鎖定了C#中的網絡驅動器上的文件

... = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read); 

鎖定文件寫入。所有其他實例只能讀取它並顯示警告,該文件不可寫。

如何找出誰(即哪臺機器)鎖定文件,在警告中顯示?

+0

除非您在遠程計算機上擁有管理員權限,否則您不能。份額可以簡單地爲只讀。 – 2012-08-15 14:31:42

+1

假設你在網絡服務器上有足夠的權限,你可以使用'NetFileEnum'。 – 2012-08-15 15:02:12

回答

3

我見過這種方法的唯一方法是打開文件的程序留下標記文件(.lock)或類似文件。這個.lock文件顯然可以包含任何你想要的(用戶名,機器等)並且可以單獨讀取。

這假定您可以控制在另一臺PC上讀取它的軟件。

1

以下是C#源代碼的發佈,其中包含有關如何查看進程列表並檢查每個進程鎖定的文件的示例。

How does one figure out what process locked a file using C#

下一步是在每臺機器的服務中使用此功能,以便進程可以發送特定文件名的查詢,然後接收有關該機器上的進程是否鎖定的響應。

數據可能包括進程名稱,用戶標識以及進程列表中的其他可用信息。

這種方法是更多的工作,但它所做的是提供一種訪問信息的方式,而不需要應用程序鎖定文件來做一些特殊的事情。

另一方面,如果您感興趣的文件在您的控制範圍之內,並且您可以確定文件訪問權限,這可能是矯枉過正。

+0

如果進程不在同一臺機器上,它會工作嗎? – KingCronus 2012-08-15 14:31:00

+0

我想知道同樣的事情。從我所知道的來看,大多數鎖定檢測依賴於能夠查看進程列表,然後查看運行的各種進程已打開和/或鎖定的文件。一種方法是在每臺機器上運行一項服務,以提供一種SNMP或類似類型的查詢服務器,以允許其他進程查詢文件打開/鎖定狀態。 – 2012-08-15 14:34:28

+0

令人沮喪的主意。如果我無法控制可能會鎖定文件的程序,我可能必須這樣做。由於我有,鎖定文件聽起來更容易。 – Niklas 2012-08-16 08:11:03

相關問題