我有一个由 3rd 方应用程序编写的日志文件,我希望我的应用程序实时/近乎“读取”该日志文件,解析新的日志条目并对某些事件采取行动。
我的想法是,我可以通过结合使用 FileSystemWatcher(发出文件更改信号)和 MemoryMappedFile(从某个偏移量继续读取)来实现这一点。
但是,由于这是我第一次使用 MemoryMappedFiles,我确实遇到了一些问题,这些问题可能是由于没有正确理解这个概念而引起的(例如,我无法打开现有文件,因为它正在被其他进程使用)。
我想知道是否有人有一个如何使用 MemoryMappedFiles 读取被另一个进程锁定的文件的示例?
谢谢,
汤姆
编辑:
从评论来看,内存映射文件似乎无法帮助我访问具有独占锁的文件。然而,像 Baretail (http://www.baremetalsoft.com/baretail/index.php) 这样的“tail”工具能够做到这一点。以 1s 的间隔从另一个应用程序读取具有排他锁的文件没有问题)。那么,必须有某种方法来做到这一点?
编辑编辑:
要回答我自己的问题,打开锁定文件的技巧是,使用以下访问标志创建 FileStream:
fileStream = new System.IO.FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.ReadWrite);