我有一个MemoryStream对象,它由Stream类型参数传递
(Stream是C#中的抽象类).
(Stream是C#中的抽象类).
我想克隆他,并创建另一个MemoryStream对象的一侧与原始的当前位置,并创建一个新的XMLReader,所以我将能够阅读其内容.
这就是我做的,它不起作用(调试标有// * – > newReader的行有{None}值)
假设:您在方法内部并具有Stream currentStream引用.
var x = new XmlReaderSettings(); x.IgnoreWhitespace = true; using (var newMemoryStream = new MemoryStream()) { stream.CopyTo(newMemoryStream); using (var newReader = XmlReader.Create(newMemoryStream,x)) //* { Doing some stuff... } }
解决方法
确保重置newMemoryStream上的位置,如下所示:
newMemoryStream.Position = 0;
在stream.CopyTo之后(newMemoryStream);但在创建XmlReader之前
所以整个事情应该是这样的:
var x = new XmlReaderSettings(); x.IgnoreWhitespace = true; using (var newMemoryStream = new MemoryStream()) { stream.CopyTo(newMemoryStream); newMemoryStream.Position = 0; using (var newReader = XmlReader.Create(newMemoryStream,x)) //* { Doing some stuff... } }
此外,由于您在输入此方法之前在原始流上使用其他阅读器,因此请确保源流的位置确实位于您希望的位置.