2012-06-29 12 views
13

ストリームをバイトに変換する方法を知りたいと思います。c#system.IO.StreamをByteに変換する

私はこのコードを見つけませんが、私の場合には、それは動作しません。

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

しかし、私の場合には、ラインparamFile.CopyTo(MemoryStreamを)で、それは何も起こりません、例外、アプリケーションがまだ動作します、コードは次の行で続行されません。

ありがとうございました。

+0

paramFileですか? –

+0

ああ、申し訳ありませんが、paramファイルは、メソッドで受け取るパラメータです。これはSystemIO.Streamです。 –

答えて

30

を書いた拡張メソッドです:

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

また、MemoryStreamをするのcopyToする必要はありませんsourceStreamがLengthプロパティをサポートしている限りバイト配列を取得するだけです。

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

実際に私はストリーム、ファイルがありません。元のデータはファイルですが、ファイルをWCFのストリームに送信します。だから、ストリームをbyte []に​​変換する必要があります。しかし、この方法では機能しません。これは、lengthプロパティがlongで、readメソッドがintを使用するためです。 –

+1

2147483647(int.MaxValue)バイトを超えない限り、これは正常に動作します。それ以外の場合は、配列をカウンタでアセンブルする必要があります。 – JamieSee

26

これは、あなたがファイルを読んでいる場合、私はちょうどFile.ReadAllBytes Methodを使用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

アテネ、余分なFromByteArrayメソッドがあるとは思いませんか? :-)私はあなたのメソッドを使用しています、私はちょうどそれを元に戻すことができる必要があります。 –

+1

これは役に立ちます。 http://stackoverflow.com/questions/4736155/how-do-i-convert-byte-to-stream-in-c –

関連する問題