C#:tail like program for text file

pis*_*hio 8 c# filesystems logging stream

我有一个日志文件,不断记录短线.我需要开发一个服务来对添加到该文件的新行做出反应(或轮询或监听),这是一种unix'尾程序,因此我的服务始终是最新的调整文件.

我不认为打开读取流并保持打开是一个好主意.也许我应该使用FileSystemWatcher类.

长话短说,我需要实时解析添加到此文件的每一个新行.

任何想法的帮助或指示真的很感激.

编辑

我一直不太清楚.我不需要任何程序,我正在编写程序.用于读取(然后处理)添加到文件的每个新行.我的意思是什么,我寻找的是一个方法(或:如何实现这一点?)用于持续拖尾,保持对被写入文件.

我必须开发一个"侦听"此文件并在每个新行上执行操作的Windows服务.

因此,如果在给定时刻文件是:

12.31.07 - jdoe [log on] 347
12.32.08 - ssmith [log on] 479
12.32.08 - mpeterson [log off] 532
12.32.09 - apacino [log on] 123
Run Code Online (Sandbox Code Playgroud)

在线的那一刻

12.32.11 - pchorr [log on] 127
Run Code Online (Sandbox Code Playgroud)

由日志记录程序(我无法访问)添加到日志文件中,我需要我的Windows服务"响应"线上瘾,拦截新行(12.32.11 - pchorr [log on] 127)并处理它.等等.

现在,我不知道该怎么做.我应该每n秒轮询一次文件,将最后一行读取存储在内存中并仅处理新添加的行.这个问题很慢,而且我每次都会读一个非常大的文件.

或者也许我可以使用FileSystemWatcher,但我没有找到任何使用它用于类似目的的例子.

那么,你建议做什么工作?谢谢.

Lee*_*Lee 8

我建议您使用FileSystemWatcher以通知您所关注的文件或文件的更改.从那里,我会在事件之间缓存诸如文件大小之类的信息,并添加一些逻辑以仅响应整行等.您可以使用类的Seek()方法FileStream跳转到文件中的特定点并从中读取那里.鉴于这些功能,如果您需要的话,手动滚动此功能应该不会太难.


mad*_*dhu 7

将使用简单的解决方案,示例代码在http://www.codeproject.com/Articles/7568/Tail-NET文章中提供.它只是一个功能复制/粘贴到您的代码中.


Doc*_*Doc 5

需要注意的是,Microsoft(自 vista/svr08 起)不再在文件更新时(例如服务更新日志文件)更新文件元数据。

例如,在更新日志文件的服务/程序关闭文件之前,文件的元数据(例如修改日期)不会更新

因此FileSystemWatcher不会像您期望的那样捕获日志文件更新。

https://blogs.technet.microsoft.com/asiasupp/2010/12/14/file-date-modified-property-are-not-updating-while-modifying-a-file-without-closure-it/