Um einen Stream in ein byte-Array zu schreiben kann man nachfolgenden Snippet nutzen. Hier wird einer Methode (private static byte[] ReadFully(Stream input, int startPosition, int endPosition)) die Paramter Stream input, int startPosition und int endPosition übergeben.
In der Methode selber wird ein byte-Array buffer instanziiert, welcher die Länge des Input-Streams hat.
Mit input.Position = 0 wird die Position auf 0 gesetzt und mit input.Seek(startPosition, SeekOrigin.Current); wird der Zeiger auf die übergebene Startposition gesetzt.
In einer While-Schleife wird nun der Stream ab der angegebenen Position gelesen, solange int read größer als 0 ist.
In der Schleife werden die Daten aus aus dem Buffer in den MemoryStream geschrieben. Ist die Position größer oder gleich endPosition wird die While-Schleife beendet und es wird der MemoryStream als byte-Array zurückgegeben.
/// <summary>
/// Read the inputstream and writes into an byte-array
/// </summary>
/// <param name="input">stream</param>
/// <param name="startPosition">startposition</param>
/// <param name="endPosition">endposition</param>
/// <returns></returns>
private static byte[] ReadFully(Stream input, int startPosition, int endPosition)
{
try
{
byte[] buffer = new byte[input.Length];
using (MemoryStream ms = new MemoryStream())
{
int read;
input.Position = 0;
input.Seek(startPosition, SeekOrigin.Current);
while ((read = input.Read(buffer, 0, 1)) > 0)
{
ms.Write(buffer, 0, read);
if (ms.Position >= endPosition)
break;
}
return ms.ToArray();
}
}
catch (Exception ex)
{
throw ex;
}
}