我遇到了.Net Framework 3.5和System.Xml.XmlReader类的异常问题。
在我的应用程序调用XmlReader.Read方法之前,它首先使用Stream.Read方法读取流的内容以进行日志记录。然后在调用Stream.Read之前,它会回到流的开头。当我这样做时,我收到以下错误:
Unhandled Exception: System.Xml.XmlException: Unexpected end of file while parsing Name has occurred. Line 1, position 4097.
但是,如果我调用XmlReader.Read,请寻找流的开头,然后调用Stream.Read方法,一切正常。但这似乎只发生在大流上。我刚刚看到一个人通过系统大约2000个字符,它工作正常吗?
我在下面提供了一个代码示例,以便了解我正在做什么。
XmlReaderSettings readerSettings = new XmlReaderSettings();
readerSettings.Schemas.Add(null, args[1]);
readerSettings.ValidationType = ValidationType.Schema;
readerSettings.ValidationEventHandler += new ValidationEventHandler(XmlValidatingReaderValidationEventHandler);
XmlReader reader = XmlReader.Create(fileReader, readerSettings);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
string content = System.Text.UTF8Encoding.UTF8.GetString(buffer, 0, buffer.Length);
fs.Seek(0, SeekOrigin.Begin);
while(reader.Read());
Console.WriteLine("Done");
由于
答案 0 :(得分:1)
使用支持XmlReader
之类的流来解决这个问题通常是一个坏主意。如果你想用同一个文件做两件事,我建议你打开两个不同的流。这样他们就不会互相干扰。
请注意,使用File.ReadAllText
是将文本文件的内容加载到字符串中的更简单方法。
答案 1 :(得分:0)
那是因为XmlReader
缓冲了来自Stream
的数据。如果你弄乱Stream
的当前位置,你也会混淆XmlReader
......