我有一个由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/

10-11 07:36