Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.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# 为多个XmlReader.Read()用法重置StreamReader_C#_Streamreader_Xmlreader - Fatal编程技术网

C# 为多个XmlReader.Read()用法重置StreamReader

C# 为多个XmlReader.Read()用法重置StreamReader,c#,streamreader,xmlreader,C#,Streamreader,Xmlreader,我想重新使用与.Read()的XML文件关联的StreamReader,该文件是从System.XML.XmlReader调用的 基本上,我已经组合了一个小的扩展方法,具有以下代码: public static string GetValueByPath(this StreamReader str, string attributeName, params string[] nodes) { str.BaseStream.Position = 0; Xm

我想重新使用与.Read()的XML文件关联的StreamReader,该文件是从System.XML.XmlReader调用的

基本上,我已经组合了一个小的扩展方法,具有以下代码:

 public static string GetValueByPath(this StreamReader str, string attributeName, params string[] nodes)
    {
        str.BaseStream.Position = 0;
        XmlReader reader = XmlReader.Create(str);
        // Stuff happens here now, not important for the question
    }
调用此扩展方法的StreamReader在整个会话中保持不变

第一次使用这个方法很好,但是如果第二次使用这个方法,我会收到一个System.Xml-Exception。没有办法有效地“重置”StreamReader吗

谢谢


Dennis

您不能只更改
基本流中的位置,因为
StreamReader
正在缓冲来自底层流的数据。它只会扰乱
StreamReader
的行为,不会带来任何好处


您应该处理旧的
StreamReader
,每次都创建一个新的。

StreamReader
不是一个昂贵的创建对象,因此,只要底层流支持设置位置,那么每次都应该在其上创建一个新的
StreamReader

您是否尝试将其添加到方法的末尾

reader.Close();

您的读卡器可能未正确关闭,这会导致下一次读取出现问题。

由于它正在缓冲,除了重置位置外,您还需要丢弃缓冲区

            sr.BaseStream.Position = 0;
            sr.DiscardBufferedData();

当我想知道我要解析的文件中有多少行时,我就这样做了(第一次遍历计算行数,第二次遍历解析并存储结果)。

谢谢你的回答,我担心会是这样。您可能不知道如何在ASP Web应用程序中执行此操作,而不会不必要地增加代码?@Dennis,不知道您的意思。。。如果没有看到你的代码,我真的无法回答这个问题