C# 在C语言中读取XML文件#
我有一个程序,它将进度和其他数据记录到一个XML文件中。我希望能够在不阻塞writer程序(不是.NET程序,我对它没有控制权)的情况下打开这个XML文件,并在XML出现时读取它,在处理完之后等待更多,直到收到EOF为止 如何在C#中实现这一点 请注意,有两个问题:C# 在C语言中读取XML文件#,c#,C#,我有一个程序,它将进度和其他数据记录到一个XML文件中。我希望能够在不阻塞writer程序(不是.NET程序,我对它没有控制权)的情况下打开这个XML文件,并在XML出现时读取它,在处理完之后等待更多,直到收到EOF为止 如何在C#中实现这一点 请注意,有两个问题: 保持读取流打开而不阻塞其他进程 知道什么时候有更多的输入,什么时候没有 我以前在一个名为的操作系统程序中也做过类似的事情。 如果你想自己做,只需检查代码,或者从代码中获取所有内容,它几乎也适用于你,这是我只关心文本文件的一部分。你可
我以前在一个名为的操作系统程序中也做过类似的事情。
如果你想自己做,只需检查代码,或者从代码中获取所有内容,它几乎也适用于你,这是我只关心文本文件的一部分。你可以通过传递以下标志打开文件流而不锁定它:
new FileStream(logFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
至于等待“EOF”,如果另一个程序只是断断续续地写入数据,您可能需要在您的进程中加入某种试探法(即,只有在X分钟内没有新数据时才停止窥视新数据)。如果我需要这样做,我会做如下操作: 当文件更改时,请使用通知。然后只需读取文件并根据需要解析XML即可
我会走这条路,因为当外部应用程序写入文件时,很难读取流。XML不是流格式,因此在实践中很难做到这一点。也许您可以让日志编写器先写入缓冲区,然后再写入磁盘。将观察者模式附加到缓冲区,并让它更新任何列表器。在这种情况下,我通常更喜欢使用逗号分隔的基于行的格式进行日志记录。如果每次写操作都打开并关闭该文件,那么在写操作之间的另一个进程将可以使用该文件