2012-01-11 24 views
1

我的意圖是寫一個byte[]到一個文件。代碼段低於:這個代碼的爲什麼這樣的文件內容差異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.Write()時使用它轉儲被存儲在數組中的值。但是StreamWriter.BaseStream.Write(byte[],int offset, int length),這些值完全不同。這是什麼原因?

+0

我建議你不要使用與文本一起工作的類(如'StreamWriter')來處理二進制數據。 – svick 2012-01-11 11:49:05

回答

4

這是因爲StreamWriterTextWriter並將字節轉換爲文本(字符串表示形式)。

並且使用BaseStream.Write(byte[] data, ...)直接寫入字節而不進行任何轉換。

但是你正在使用2種方法交錯,我猜一些覆蓋也發生了。請注意,您應該使用其中一種,而不是兩種。

+0

另外值得一提的是'StreamWriter'正在緩衝(不期望任何人直接訪問'BaseStream'),這就是爲什麼數字出現在其他文本之後。 – 2012-01-11 11:42:19

+0

只是想知道爲什麼會產生這樣的特殊字符,字節意味着從0到255的值。 – Raghav55 2012-01-11 11:44:39

+0

重新設置'特殊字符' - 您看到的取決於使用的查看器和使用/推導的編碼。 – 2012-01-11 12:25:01