使用C#我如何獲得有關誰打開文件的信息? 用戶名和機器名就足夠了。確定誰使用C#打開文件
萬一它很重要我有Windows工作站通過Samba訪問Linux文件服務器上的文件。 我需要在工作站上運行的程序中使用這些信息。
使用C#我如何獲得有關誰打開文件的信息? 用戶名和機器名就足夠了。確定誰使用C#打開文件
萬一它很重要我有Windows工作站通過Samba訪問Linux文件服務器上的文件。 我需要在工作站上運行的程序中使用這些信息。
核心的.NET庫沒有任何手段來做到這一點。
如果我正確理解你的話,你想從Windows工作站A知道誰在Linux文件共享上打開了文件,並且有些打開文件的用戶可能是從其他窗口框創建的,如果是這樣的話您需要在Linux端提供服務,您可以查詢該服務以將其提供給Windows工作站。
在本地機器上可以實現,但至少您需要互操作到OS API,如NtQueryInformationFile和NtQueryObject(均未正式記錄)等等。像進程監視器這樣的工具會動態地安裝設備驅動程序,以實現他們所做的檢查級別,並且只會告訴您哪個用戶打開哪些本地文件句柄。
我不認爲你可以做到這一點使用.NET
在過去,當我碰到這個問題,我總是最後使用的process monitor或process explorer。
您正確理解我的問題。我以爲System.IO中可能有這樣的動物。我可能正在考慮使用具有WhoHasInfo方法的AutoCAD API,該方法可獲取有關.DWG(或相關)文件的信息。它獲取用戶名,計算機名稱,isFileLocked和OpenTime。 – mohnston 2011-05-04 18:39:08
如果遠程文件位於通過共享文件夾公開的Windows Server上,該怎麼辦?在這種情況下是SAMBA,還是在.NET庫中實際存在缺陷? – 2012-01-25 23:23:20
爲了幫助他人:由於它是一個Linux Samba文件服務器,因此您需要執行「smbstatus」命令,捕獲並解析輸出。其中包括:用戶,機器和文件。你甚至可以用-L選項來請求一個只有鎖定文件的列表(我試圖在Java中做同樣的事情,這是我找到的唯一路徑),儘管我會非常喜歡一個適用於Windows的解決方案2008通過Linux的文件服務器沒有一個解決方案是顯而易見的。 – Quaternion 2014-03-27 23:38:40