Comment faire pour supprimer des données à partir d'un MemoryStream
Je ne peux pas obtenir que cela fonctionne. J'ai un MemoryStream objet. Cette classe
a une Position bien qui vous indique le nombre d'octets que vous avez lu.
Ce que je veux faire est de supprimer tous les octets entre 0 et la Position-1
J'ai essayé ceci:
MemoryStream ms = ...
ms.SetLength(ms.Length - ms.Position);
mais à un certain point, mes données est corrompu.
Donc j'ai fini par faire ce
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);
qui fonctionne mais n'est pas vraiment efficace.
Des idées comment je peux obtenir que cela fonctionne?
Grâce
M'a aidé, merci
OriginalL'auteur LEM | 2011-04-20
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas supprimer des données à partir d'un
MemoryStream
- le plus propre serait de créer un nouveau flux de mémoire basé sur les données que vous souhaitez:vous pouvez truncate les données, mais pas de les supprimer arbitraire des blocs, vous devez copier les données d'une façon ou de l'autre. Après avoir dit que mon code n'est pas meilleure que la vôtre (autres que vous êtes en s'appuyant sur
ms.Read()
pour copier tous les octets)Je comprends maintenant. Merci!
OriginalL'auteur BrokenGlass
Cela devrait fonctionner et d'être beaucoup plus efficace que de créer un nouveau tampon:
MemoryStream.GetBuffer() vous permet d'accéder à la mémoire tampon existante, de sorte que vous pouvez déplacer d'octets sans la création d'un nouveau tampon.
Bien sûr, vous devez être prudent au sujet des limites de questions.
OriginalL'auteur eselk
Appel
ms.SetLength(ms.Length - ms.Position)
ne supprimera pas les octets entre0
etms.Position-1
, en fait, il va supprimer des octets entrems.Length - ms.Position
etms.Length
.Pourquoi ne pas simplement écrire:
OriginalL'auteur Seth Moore
OriginalL'auteur Vladimir Poslavskiy