我有一个由MemoryStream
类型参数传递的Stream
对象
(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...
}
}
另外,由于在输入此方法之前,您正在原始流上使用其他阅读器,因此请确保源流的
Position
确实位于您想要的位置。关于c# - 如何克隆MemoryStream对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13962015/