2012-06-29 30 views
13

Me gustaría saber cómo convertir una secuencia en un byte.C# convert system.IO.Stream to Byte []

encuentro este código, pero en mi caso no funciona:

var memoryStream = new MemoryStream(); 
paramFile.CopyTo(memoryStream); 
byte[] myBynary = memoryStream.ToArray(); 
myBinary = memoryStream.ToArray(); 

Pero en mi caso, en la línea de paramFile.CopyTo (MemoryStream) pasa nada, no es una excepción, la aplicación sigue funcionando , pero el código no continúa con la siguiente línea.

Gracias.

+0

What es paramFile? –

+0

Ah, lo siento, el archivo param es el parámetro que recibo en el método, es un SystemIO.Stream. –

Respuesta

30

Si está leyendo un archivo sólo tiene que utilizar el File.ReadAllBytes Method:

byte[] myBinary = File.ReadAllBytes(@"C:\MyDir\MyFile.bin"); 

Además, no hay necesidad de copyTo un MemoryStream solo para obtener una matriz de bytes, siempre y cuando sourceStream sea compatible con la propiedad Length:

byte[] myBinary = new byte[paramFile.Length]; 
paramFile.Read(myBinary, 0, (int)paramFile.Length); 
+0

Realmente tengo una secuencia, no el archivo. Aunque los datos originales son un archivo, pero envío el archivo a la secuencia en el WCF. Entonces necesito convertir la secuencia a un byte []. Pero de esta manera no funciona, porque la propiedad de longitud es larga, y el método de lectura usa un int. –

+1

Siempre y cuando no exceda los bytes 2147483647 (int.MaxValue), esto funciona bien. De lo contrario, debe armar la matriz con un contador. – JamieSee

26

Este es un método de extensión que escribí para la clase Stream

public static class StreamExtensions 
    { 
     public static byte[] ToByteArray(this Stream stream) 
     { 
      stream.Position = 0; 
      byte[] buffer = new byte[stream.Length]; 
      for (int totalBytesCopied = 0; totalBytesCopied < stream.Length;) 
       totalBytesCopied += stream.Read(buffer, totalBytesCopied, Convert.ToInt32(stream.Length) - totalBytesCopied); 
      return buffer; 
     } 
    } 
+0

Athens, supongo que no tienes un método adicional FromByteArray por ahí? :-) Estoy usando tu método, solo necesito poder convertirlo ahora. –

+1

Esto puede ayudar. http://stackoverflow.com/questions/4736155/how-do-i-convert-byte-to-stream-in-c –