二進制與文本文件主要有兩個大的區別:
1、換行符的區別:
Windows平台下
對於Windows文本文件,它們使用回車和換行來表示換行符;如果以“文本”方式打開文件,當讀取文件的時候,系統會將所有的"/r/n"轉換成"/n";當寫入文件的時候,系統會將"/n"轉換成"/r/n"寫入。
如果以"二進制"方式打開文件,則讀/寫都不會進行這樣的轉換。
在Unix/Linux平台下
對於Unix和Linux文件,使用換行來表示換行符。而C++是從Unix系統上發展而來的,也使用換行來表示換行符,所以“文本”與“二進制”模式沒有區別。
2、編碼存儲的區別:
文本模式:讀取文件時,首先讀取文件物理上所對應的二進制比特流(前面已經說了,存儲都是二進制的),然后按照你所選擇的解碼方式來解釋這個流,然后將解釋結果顯示出來。如果你選取的解碼方式是ASCII碼形式(ASCII碼的一個字符是8個比特),接下來,它會8個比特8個比特地來解釋這個文件流。
二進制模式:不需要轉換,直接讀取或者寫入。
還有一點需要注意的是,數據有字符型和非字符型(數)兩種。按文本方式寫文件指的是將數據轉換為對應的字符型數據之后再寫入文件。對於非字符型數據,都要進行轉換處理。例如:int m = 12; 以及 double f = 2.3;,分別按照 "%d"、"%lf" 方式將 m 和 f 寫入文件的時候,寫入的分別是 '1'、'2' 兩個字符以及 '2'、'.'、'3' 等三個字符的ASCII碼值。顯然,如果按照二進制方式寫的話,在文件中一般 m 要占 4 個字節、f 要占 8 個字節。
總的來說,在windows平台下,C/C++處理文件時,當寫緩沖區中無換行符''/n''(0AH),文本寫與二進制寫的結果是一樣的,同理,當文件中不存在''/r/n''(0DH0AH)時,文本讀與二進制讀的結果一樣。