2010-07-02 175 views
7

有什麼方法可以確定文件是否由任何包含不鎖定文件的應用程序(如記事本)打開。確定文件是否打開

我需要檢測何時給定的文件myfile.txt不再在包括記事本在內的任何應用程序中打開 - 所以我不能使用File.Open(...)與獨佔訪問來測試,因爲文件沒有鎖定它。

+0

可能重複的[如何獲得C#中的進程打開的文件句柄列表?](http://stackoverflow.com/questions/177146/how-do-i-get-the-list-of-按c中的進程打開文件句柄) – 2010-07-02 02:37:26

+1

這不是重複的。記事本沒有打開的文件句柄。 – 2010-07-02 12:49:41

回答

7

編號當記事本打開文件時,它已經讀取了中的整個文件,然後關閉它。因此,在操作系統中沒有將記事本的私有內存與磁盤上的文件鏈接起來的痕跡。

獨佔打開文件不起作用,因爲記事本沒有打開文件。搜索記事本的句柄表將不起作用,因爲記事本沒有打開該文件。

檢測此問題的唯一方法是編寫一個注入每個進程的非託管DLL來掃描其虛擬內存,以搜索確切的文件內容。不建議。

0

必須調用File.Open(...)指定所需的訪問標誌並檢查返回值以確定文件是否已打開或訪問是否被拒絕。這是訪問文件的推薦和安全方式。