Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C语言中读取XML文件#_C# - Fatal编程技术网

C# 在C语言中读取XML文件#

C# 在C语言中读取XML文件#,c#,C#,我有一个程序,它将进度和其他数据记录到一个XML文件中。我希望能够在不阻塞writer程序(不是.NET程序,我对它没有控制权)的情况下打开这个XML文件,并在XML出现时读取它,在处理完之后等待更多,直到收到EOF为止 如何在C#中实现这一点 请注意,有两个问题: 保持读取流打开而不阻塞其他进程 知道什么时候有更多的输入,什么时候没有 我以前在一个名为的操作系统程序中也做过类似的事情。 如果你想自己做,只需检查代码,或者从代码中获取所有内容,它几乎也适用于你,这是我只关心文本文件的一部分。你可

我有一个程序,它将进度和其他数据记录到一个XML文件中。我希望能够在不阻塞writer程序(不是.NET程序,我对它没有控制权)的情况下打开这个XML文件,并在XML出现时读取它,在处理完之后等待更多,直到收到EOF为止

如何在C#中实现这一点

请注意,有两个问题:

  • 保持读取流打开而不阻塞其他进程
  • 知道什么时候有更多的输入,什么时候没有

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

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

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

    至于等待“EOF”,如果另一个程序只是断断续续地写入数据,您可能需要在您的进程中加入某种试探法(即,只有在X分钟内没有新数据时才停止窥视新数据)。

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

    当文件更改时,请使用通知。然后只需读取文件并根据需要解析XML即可


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

    XML不是流格式,因此在实践中很难做到这一点。也许您可以让日志编写器先写入缓冲区,然后再写入磁盘。将观察者模式附加到缓冲区,并让它更新任何列表器。在这种情况下,我通常更喜欢使用逗号分隔的基于行的格式进行日志记录。如果每次写操作都打开并关闭该文件,那么在写操作之间的另一个进程将可以使用该文件