c# – 如何克隆MemoryStream对象?

前端之家收集整理的这篇文章主要介绍了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...
    }
}

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

原文链接:https://www.f2er.com/csharp/100891.html

猜你在找的C#相关文章