当前位置: 首页 > 编程语言 > C#

如何克隆一个MemoryStream对象?分享

时间:2023-04-10 15:45:07 C#

如何克隆MemoryStream对象?我有一个由Stream类型参数传递的MemoryStream对象(Stream是C#中的抽象类)。我想克隆他,在原来的当前位置的一侧创建另一个MemoryStream对象,并创建一个新的XMLReader,这样我就可以读取它的内容。这就是我所做的,但它不起作用(用//*标记的调试->newReader具有{None}值)假设:你在一个方法中并且有一个StreamcurrentStream引用。varx=newXmlReaderSettings();x.IgnoreWhitespace=true;使用(varnewMemoryStream=newMemoryStream()){stream.CopyTo(newMemoryStream);using(varnewReader=XmlReader.Create(newMemoryStream,x))//*{Doingsomestuff...}}确保重置newMemoryStream上的位置,如newMemoryStream所示:newMemoryStream.Position=0;在stream.CopyTo(newMemoryStream)之后;stream.CopyTo(newMemoryStream);但是在创建XmlReader之前,整个事情应该是这样的:varx=newXmlReaderSettings();x.IgnoreWhitespace=true;使用(varnewMemoryStream=newMemoryStream()){stream.CopyTo(newMemoryStream);newMemoryStream.Position=0;using(varnewReader=XmlReader.Create(newMemoryStream,x))//*{Doingsomestuff...}}此外,由于您在输入此方法之前在原始流上使用了另一个读取器,因此请确保源流的Position确实是你想要的地方。我解决了我的问题!?缺少的项目标有//*。代码应该是这样的:varxmlReaderSettings=newXmlReaderSettings();stream.Position=0;//*xmlReaderSettings.IgnoreWhitespace=true;使用(varnewMemoryStream=newMemoryStream()){stream.CopyTo(newMemoryStream);新内存流。位置=0;//*使用(varnewReader=XmlReader.Create(newMemoryStream,xmlReaderSettings)){newReader.MoveToContent();//*Doingsomestuff...}}你可以使用下面的扩展方法来克隆一个MemoryStream,包括它的当前位置,并确保原始MemoryStream的位置在克隆后重置为原来的位置:以上是C#学习教程:如何克隆一个MemoryStream对象?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——publicstaticMemoryStreamClone(thisMemoryStreamms){varpos=ms.Position;varms2=newMemoryStream();ms.CopyTo(ms2);ms.Position=pos;ms2.Position=pos;返回ms2;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: