2014-06-06 50 views
2

我正在尋找一種方法來查看鎖定文件的目錄(及其子目錄),即應用程序打開文件並將其鎖定時,事件應在我的應用程序中觸發。C# - 檢測目錄中的鎖定文件

所以我一直在使用FileSystemWatcher的其他目的,如檢測重命名,更新等,但看鎖[使用上次訪問]據需要按規定Here 這是不是一種選擇,到目前爲止一個註冊表修改。

我至今認爲的其他解決方案是使用另一個線程中的FileInfo對象持續查找'LastAccess'屬性中的更改,並驗證文件是否被鎖定。

有沒有更好的解決方案?

+0

我不是在尋找一個特定的文件。在這裏我有一個目錄,我需要注意在該目錄中鎖定文件。 –

+0

如果你想有效地做到這一點(可靠),你可能需要看看實現你自己的[微過濾器驅動程序](http://msdn.microsoft.com/en-gb/library/windows/hardware/ff540402(v = vs.85).aspx)並掛鉤到適當的API。 – James

回答

1

不幸的是,沒有辦法看到文件是否被進程鎖定。

但是你可以嘗試自己來訪問文件和火基於這樣一個事件:

public bool IsFileLocked(string filePath) 
{ 
    try 
    { 
     using (File.Open(filePath, FileMode.Open)){} 
    } 
    catch (IOException e) 
    { 
     retturn true; 
    } 

    return false; 
} 

當你的應用程序無法訪問文件,該函數將返回true(因此它在被另一個程序使用),否則返回false。

+0

所以你的建議是不斷嘗試打開目錄中的每個文件,直到出現IOException?可怕的資源浪費。 – James

+0

是的,這是我的最後一個選擇。 –

+0

@詹姆斯我害怕相同 –