サード パーティ製アプリケーションによって書き込まれたログ ファイルがあり、そのアプリケーションでそのログ ファイルをリアルタイムまたはニア タイムで「読み取り」、新しいログ エントリを解析し、特定のイベントに対応させたいと考えています。
私の考えでは、FileSystemWatcher (ファイルの変更を知らせる) と MemoryMappedFile (特定のオフセットからの読み取りを続行する) の組み合わせでこれを達成できると考えていました。
ただし、MemoryMappedFiles を使用するのはこれが初めてなので、概念を正しく理解していないために発生する可能性があるいくつかの問題に遭遇します (たとえば、他のプロセスで使用されている既存のファイルを開くことができません)。
誰かが MemoryMappedFiles を使用して別のプロセスによってロックされているファイルを読み取る方法の例を持っているかどうか疑問に思っていましたか?
ありがとう、
トム
編集:
コメントから、メモリ マップ ファイルは、排他ロックを持つファイルへのアクセスに役立たないようです。ただし、Baretail (http://www.baremetalsoft.com/baretail/index.php) などの「テール」ツールは、まさにそれを行うことができます。1秒間隔で別のアプリケーションから排他ロックを持つファイルを読み取るのに問題はありません)。それで、これを行うには何らかの方法が必要ですか?
編集編集:
私自身の質問に答えるために、ロックされたファイルを開く際の秘訣は、次のアクセス フラグを使用して FileStream を作成することです。
fileStream = new System.IO.FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.ReadWrite);