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

时间:2011-04-19 14:48:19

标签: c# streamreader xmlreader

我想重新使用我与.dad()的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在整个Session中保持不变。

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

谢谢,

丹尼斯

4 个答案:

答案 0 :(得分:5)

您不能只更改BaseStream中的位置,因为StreamReader正在缓冲基础流中的数据。它只会混淆StreamReader的行为,不会有任何好处。

您应该处置旧的StreamReader并每次都创建一个新的。{/ p>

答案 1 :(得分:2)

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

答案 2 :(得分:0)

您是否尝试过将此添加到方法的末尾?

reader.Close();

您的阅读器可能无法正确关闭,这会导致下次阅读时出现问题。

答案 3 :(得分:0)

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

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

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