2014-03-30 92 views
0

我正在使用下面的代碼創建Binary文件。在C中創建二進制文件的正確方法#

var a = new[] 
{ 
    "C50-12-25", 
    "C50-12-20" 
}; 

using (var bw = new BinaryWriter(File.Open("file.bin", FileMode.Create))) 
{ 
    foreach (var i in a) 
    { 
     bw.Write(i); 
    } 
} 

我打開文件,我沒有看到的東西,像一個畫面是這樣,我一直以爲一個Binary文件會是什麼樣子。

http://www.dotnetperls.com/binary.png

實際上,我能讀我寫的完整文本。

C50-12-25 C50-12-20 

這是這樣嗎?我對此完全陌生,所以任何幫助我指出正確的方向對我來說都是很重要的。

+1

以十六進制編輯器打開文件時的另一個注意事項:文件內容僅對文件的長度有效。例如。如果您將4個字節寫入文件,則前4個字節保證是正確的,但超出這個範圍就是垃圾。這與文件存儲方式有關;他們根本不會單獨存儲4個字節。 – kevin

+0

@kayson如果從磁盤讀取原始數據而不是使用操作系統的文件處理函數,十六進制編輯器將只顯示超出文件長度的垃圾。我不認爲這是一個真正的問題,自從諾頓磁盤編輯器以來,我還沒有遇到過這樣的十六進制編輯器。 – Dai

回答

3

您使用的Write的超負荷:BinaryWriter.Write(String),寫出您使用編碼提供給文件的字符串。

它看起來像你想通過將它們解碼爲十六進制值將這些字符串轉換爲二進制數據...除非它們看起來不像十六進制值,因爲它們不是以2組的形式出現。無論如何,這個過程記錄在這裏(How can I convert a hex string to a byte array?)。

請注意,您發佈的「圖片」是十六進制編輯器。你沒有在你的文章中描述你如何打開文件;如果您在記事本或類似的編輯器中打開文件,那麼您將始終得到打印字符,而不是文件內容的十六進制表示。

+0

感謝戴,是的,我錯了那裏的圖像是一個十六進制文件。但我的觀點是,如果我用這些方法寫任何東西,它可以以某種方式被讀成純文本。我對麼? – Vahid

+0

我糾正了這個問題。 – Vahid

+0

@Vahid我認爲您需要更好地理解文件的真實含義,以及對編碼和「數據視圖」的概念進行解讀。你需要知道的一切都會在那裏。 – Dai