我想重新使用我与.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?
谢谢,
丹尼斯
答案 0 :(得分:5)
您不能只更改BaseStream
中的位置,因为StreamReader
正在缓冲基础流中的数据。它只会混淆StreamReader
的行为,不会有任何好处。
您应该处置旧的StreamReader
并每次都创建一个新的。{/ p>
答案 1 :(得分:2)
StreamReader
不是一个昂贵的对象,因此只要底层流支持设置位置,那么每次都应该在其上创建一个新的StreamReader
。
答案 2 :(得分:0)
您是否尝试过将此添加到方法的末尾?
reader.Close();
您的阅读器可能无法正确关闭,这会导致下次阅读时出现问题。
答案 3 :(得分:0)
由于它正在缓冲,除了重置位置外,还需要丢弃缓冲区。
sr.BaseStream.Position = 0;
sr.DiscardBufferedData();
当我想知道我要解析的文件中有多少行时(第一遍计数行,第二遍解析并存储结果),我已经这样做了。