I cannot get this to work. I have a MemoryStream object. This class has a Position property that tells you how many bytes you have read.
What I want to do is to delete all the bytes between 0 and Position-1
I tried this:
MemoryStream ms = ...
ms.SetLength(ms.Length - ms.Position);
but at some point my data gets corrupted.
So I ended up doing this
MemoryStream ms = ...
byte[] rest = new byte[ms.Length - ms.Position];
ms.Read(rest, 0, (int)(ms.Length - ms.Position));
ms.Dispose();
ms = new MemoryStream();
ms.Write(rest, 0, rest.Length);
which works but is not really efficient.
Any ideas how I can get this to work?
Thanks
Calling
ms.SetLength(ms.Length - ms.Position)
won't remove the bytes between0
andms.Position-1
, in fact it will remove bytes betweenms.Length - ms.Position
andms.Length
.Why not just write:
You can't delete data from a
MemoryStream
- the cleanest would be to create a new memory stream based on the data you want:This should work and be much more efficient than creating a new buffer:
MemoryStream.GetBuffer() gives you access to the existing buffer, so you can move bytes around without creating a new buffer.
Of course you'll need to be careful about out-of-bounds issues.