I have a MemoryStream
object which is passed by Stream
type parameter
(Stream
is abstract class in C#).
I want to clone him and to create another MemoryStream
object a side with current position of the original and to create also a new XMLReader
out of it, so I will be able to read its content.
This is what I did, and it's not working (debugging the line marked with //* -> newReader
has got {None}
value)
Assumption: you are inside a method and have Stream currentStream
reference.
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...
}
}
Make sure to reset the position on newMemoryStream
like so:
newMemoryStream.Position = 0;
after stream.CopyTo(newMemoryStream);
but before creating the XmlReader
So the whole thing should look like this:
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...
}
}
Also, since you're using another reader on the original stream prior to entering this method, make sure that the Position
of the source stream is really where you want it to be.