1. 二進制模式和文本模式
文本模式 | 二進制模式 |
---|---|
C可以認識Ctrl+Z爲文件結尾 | C只會把Ctrl+Z當做文件中的一個字符,真正的文件結尾在後面 |
MS-DOS用\r\n 組合表示換行符,C將\r\n 看作\n |
程序將看到這兩個字符 |
此外,文件的第一個字符可能不是文件的第一個字符,所以用文本文件打開,ftell()可以返回正確的文件當前位置。而使用二進制方式打開,則可能得不到正確的結果。
2. 文本I/O和二進制I/O
如果將整數12345使用文本IO函數fprintf(fp, "%d", num)
輸入到文件指針fp所指向的文件中,實質上是將字符1
,2
,3
,4
,5
輸入到了文件中。佔了5個字節。
而使用二進制IO函數fwrite(&num, siezof(num), 1, fp)
輸入到文件指針fp所指向的文件中,則是將12345
的二進制形式輸入到了文本中,佔一個int
大小的字節。
文本模式的IO函數可以用在二進制視圖下打開的文件(rb
、wb
等),二進制模式的IO函數也可以用在文本視圖下打開的文件(r
、w
等)。但一般情況下還是在文本視圖下使用文本IO,二進制模式下使用二進制IO。
大概是因爲文本模式的目的是使得人類能夠直接閱讀文件中的內容,要支持一種編碼(ASCII、UTF8)。而二進制是方便計算機讀取數據,同時使文件更小。
參考
C Prim Plus 第五版
C語言文本方式和二進制方式打開文件區別