2012-01-11 22 views
1

私はファイルにbyte[]を書くことを意図しています。コードスニペットは、以下である:StreamWriter.Write()を使用する場合、このコードスニペットのなぜこのようなファイルの内容の違いがC#

byte[] stream = { 10, 20, 30, 40, 60 }; 

for (int i = 0; i < 2; i++) 
{ 
    FileStream aCmdFileStream = new FileStream(@"c:\binarydata.txt", FileMode.Append, FileAccess.Write, FileShare.None); 
    StreamWriter aStreamWriter = new StreamWriter(aCmdFileStream); 

    for (int ii = 0; ii < stream.Length; ii++) 
    { 
     aStreamWriter.Write(stream[ii]); 
     aStreamWriter.WriteLine(); 
     aStreamWriter.BaseStream.Write(stream,0,stream.Length); 
    } 

    aStreamWriter.Close(); 
} 

出力

(< 
(< 
(< 
(< 
(<10 
20 
30 
40 
60 

(< 
(< 
(< 
(< 
(<10 
20 
30 
40 
60 

それが配列に格納された値をダンプ。しかし、StreamWriter.BaseStream.Write(byte[],int offset, int length)の値は全く異なります。これの理由は何ですか?

+0

バイナリデータを扱うためのテキスト(「StreamWriter」など)を扱うためのクラスを使用しないことをお勧めします。 – svick

答えて

4

これは、StreamWriterTextWriterであり、バイトをテキスト(文字列表現)に変換するためです。

BaseStream.Write(byte[] data, ...)を使用すると、変換なしで直接バイトが書き込まれます。

しかし、2つの方法をインターリーブして使用していますが、いくつかの上書きが行われているようです。どちらか一方を使うべきであり、両方を使うべきではないことに注意してください。

+0

また、 'StreamWriter'がバッファリングしている(誰にも' BaseStream'に直接アクセスすることを期待していない)ということに言及する価値があります。なぜなら、数字が他のテキストの後に現れる理由です。 –

+0

なぜこのような特殊文字が生成されるのか不思議です。バイトは0から255までの値を意味します。 – Raghav55

+0

Re: '特殊文字' - 使用するビューアと使用される/使用されるエンコーディングによって異なります。 –

関連する問題