c# – 如何克隆MemoryStream对象?

我有一个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...
    }
}

此外,由于您在输入此方法之前在原始流上使用其他阅读器,因此请确保源流的位置确实位于您希望的位置.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...