public static byte[] ReadExactly(this Stream stream, long maxCount)
{
using (MemoryStream result = new MemoryStream())
{
byte[] buffer = new byte[1024 * 1024];
int bytesRead = 0;
long leftToRead = maxCount;
while ((bytesRead = stream.Read(buffer, 0, leftToRead > int.MaxValue ? int.MaxValue : Convert.ToInt32(leftToRead))) != 0)
{
leftToRead -= bytesRead;
result.Write(buffer, 0, bytesRead);
}
return result.ToArray();
}
}