2011-05-04 74 views
14

使用C#我如何獲得有關誰打開文件的信息? 用戶名和機器名就足夠了。確定誰使用C#打開文件

萬一它很重要我有Windows工作站通過Samba訪問Linux文件服務器上的文件。 我需要在工作站上運行的程序中使用這些信息。

回答

4

核心的.NET庫沒有任何手段來做到這一點。

如果我正確理解你的話,你想從Windows工作站A知道誰在Linux文件共享上打開了文件,並且有些打開文件的用戶可能是從其他窗口框創建的,如果是這樣的話您需要在Linux端提供服務,您可以查詢該服務以將其提供給Windows工作站。

在本地機器上可以實現,但至少您需要互操作到OS API,如NtQueryInformationFileNtQueryObject(均未正式記錄)等等。像進程監視器這樣的工具會動態地安裝設備驅動程序,以實現他們所做的檢查級別,並且只會告訴您哪個用戶打開哪些本地文件句柄。

+0

您正確理解我的問題。我以爲System.IO中可能有這樣的動物。我可能正在考慮使用具有WhoHasInfo方法的AutoCAD API,該方法可獲取有關.DWG(或相關)文件的信息。它獲取用戶名,計算機名稱,isFileLocked和OpenTime。 – mohnston 2011-05-04 18:39:08

+0

如果遠程文件位於通過共享文件夾公開的Windows Server上,該怎麼辦?在這種情況下是SAMBA,還是在.NET庫中實際存在缺陷? – 2012-01-25 23:23:20

+0

爲了幫助他人:由於它是一個Linux Samba文件服務器,因此您需要執行「smbstatus」命令,捕獲並解析輸出。其中包括:用戶,機器和文件。你甚至可以用-L選項來請求一個只有鎖定文件的列表(我試圖在Java中做同樣的事情,這是我找到的唯一路徑),儘管我會非常喜歡一個適用於Windows的解決方案2008通過Linux的文件服務器沒有一個解決方案是顯而易見的。 – Quaternion 2014-03-27 23:38:40