我有一個由第三方應用程序編寫的日誌文件,我希望我的應用程序能夠實時/近時「讀取」該日誌文件,解析新日誌並根據某些事件採取行動。使用MemoryMappedFile和FileSystemWatcher檢測日誌文件的新條目
我的想法是,我可以通過FileSystemWatcher(用於信號文件更改)和MemoryMappedFile(從某個偏移量繼續讀取)的組合來實現此目的。
但是,由於這是我第一次使用MemoryMappedFiles,我遇到了一些可能由於不能正確理解概念而引起的問題(例如,我無法打開現有文件,因爲它正被另一個使用處理)。
我想知道是否有人有一個如何使用MemoryMappedFiles讀取被另一個進程鎖定的文件的例子?
感謝,
湯姆
編輯:
從評論,它看起來像內存映射文件不會幫我訪問有獨佔鎖文件。然而,「尾巴」工具例如Baretail(http://www.baremetalsoft.com/baretail/index.php)能夠做到這一點。從1秒的時間間隔讀取另一個應用程序獨佔鎖定的文件沒有問題)。那麼,必須有一些方法來做到這一點?
EDITEDIT:
要回答我的問題,在開啓鎖定文件的伎倆,創建具有以下訪問的標誌因此FileStream:
fileStream = new System.IO.FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.ReadWrite);
我做了一個評論關於詹姆斯的崗位所需要的文件共享參數的變化問題。一個MMF無法繞過一個完全鎖定的文件,如果是這樣的話,你會被卡住。 – 2010-11-16 21:10:38
請看我上面的編輯。這個問題似乎更專注於解決MMF與FileStream之間的排他鎖問題。我已經嘗試了多個窗口尾部工具,他們似乎都能夠解決排他鎖只是好,任何想法他們如何實現這一目標? – TJF 2010-11-16 21:14:07