加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何克隆MemoryStream对象?

发布时间:2020-12-15 08:08:55 所属栏目:百科 来源:网络整理
导读:我有一个MemoryStream对象,它由Stream类型参数传递 (Stream是C#中的抽象类). 我想克隆他,并创建另一个MemoryStream对象的一侧与原始的当前位置,并创建一个新的XMLReader,所以我将能够阅读其内容. 这就是我做的,它不起作用(调试标有// * – newReader的行有{N
我有一个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...
    }
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读