2

我有一个程序将其进度和其他数据记录到 XML 文件中。我希望能够打开这个 XML 文件而不会阻止编写器程序(不是 .NET 程序,我无法控制它),并在 XML 出现时读取它,在它全部处理完毕后等待更多,直到收到 EOF。

如何在 C# 中实现这一点?

注意有2个问题:

  1. 保持阅读流打开而不阻塞其他进程。
  2. 知道什么时候有更多的输入,什么时候没有输入。
4

3 回答 3

3

如果我需要这样做,我会执行以下操作:

使用FileSystemWatcher在文件更改时获得通知。然后只需读取文件并根据需要解析 XML。

我会沿着这条路线走,因为当外部应用程序写入文件时很难读取流。

于 2012-11-13T14:54:30.093 回答
1

过去,我在一个名为Tailf的操作系统程序中做了类似的事情。如果你想自己做,只需检查代码,或者从中获取所有内容,它几乎也应该适用于你,这是我只关心文本文件的部分事实。

于 2012-11-13T14:52:18.350 回答
1

您可以通过传入以下标志打开文件流而不锁定它:

new FileStream(logFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

至于等待“EOF”,如果其他程序只是间歇性地写入数据,您可能必须在您的进度中加入某种启发式方法(即,只有在X分钟内没有新数据时才停止查看新数据)。

于 2012-11-13T14:54:26.600 回答