我有一个程序将其进度和其他数据记录到 XML 文件中。我希望能够打开这个 XML 文件而不会阻止编写器程序(不是 .NET 程序,我无法控制它),并在 XML 出现时读取它,在它全部处理完毕后等待更多,直到收到 EOF。
如何在 C# 中实现这一点?
注意有2个问题:
- 保持阅读流打开而不阻塞其他进程。
- 知道什么时候有更多的输入,什么时候没有输入。
我有一个程序将其进度和其他数据记录到 XML 文件中。我希望能够打开这个 XML 文件而不会阻止编写器程序(不是 .NET 程序,我无法控制它),并在 XML 出现时读取它,在它全部处理完毕后等待更多,直到收到 EOF。
如何在 C# 中实现这一点?
注意有2个问题:
如果我需要这样做,我会执行以下操作:
使用FileSystemWatcher在文件更改时获得通知。然后只需读取文件并根据需要解析 XML。
我会沿着这条路线走,因为当外部应用程序写入文件时很难读取流。
过去,我在一个名为Tailf的操作系统程序中做了类似的事情。如果你想自己做,只需检查代码,或者从中获取所有内容,它几乎也应该适用于你,这是我只关心文本文件的部分事实。
您可以通过传入以下标志打开文件流而不锁定它:
new FileStream(logFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
至于等待“EOF”,如果其他程序只是间歇性地写入数据,您可能必须在您的进度中加入某种启发式方法(即,只有在X分钟内没有新数据时才停止查看新数据)。