c/c++中對檔案的操作分以二進位制檔案方式讀寫和以文字檔案方式讀寫兩種。例如,
/*以讀方式開啟文字檔案*/
file *fp = fopen("test.txt","r");
/*以寫方式開啟二進位制檔案*/
file *fp = fopen("test.txt","wb");
二者的根本區別在哪兒?答案是:二者唯一的區別就在於對換行符的處理上。
歷史:總結:在計算機還沒有出現之前,有一種叫做電傳打字機(teletype model 33)的玩意,每秒鐘可以打10個字元。但是它有乙個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字元。要是在這0.2秒裡面,又有新的字元傳過來,那麼這個字元將丟失。
於是,研製人員想了個辦法解決這個問題,就是在每行後面加兩個表示結束的字元。乙個叫做「回車」,告訴打字機把列印頭定位在左邊界;另乙個叫做「換行」,告訴打字機把紙向下移一行。
這就是「換行」和「回車」的來歷,從它們的英語名字上也可以看出一二。
後來,計算機發明了,這兩個概念也就被般到了計算機上。那時,儲存器很貴,一些科學家認為在每行結尾加兩個字元太浪費了,加乙個就可以。於是,就出現了分歧。
unix 系統裡,每行結尾只有「《換行》」,即「\n」;windows系統裡面,每行結尾是「 《回車》《換 行》」,即「\r\n」;mac系統裡,每行結尾是「《回車》」。乙個直接後果是,unix/mac系統下的檔案在windows裡打 開的話,所有文字會變成一行;而windows裡的檔案在unix/mac下開啟的話,在每行的結尾可能會多出乙個^m符號。
不同計算機上c語言統一規定為:前面已經說過,c語言讀寫二進位制檔案和文字檔案的唯一在於對換行符的處理上。文字檔案的行結束符一律變成乙個符號lf,也就是換行符,也就是new line符,也就是』\n』。
windows平台下,c語言,
1.在向文字檔案寫入』\n』時,實際上寫入了』\r\n』(因為windows平台用』\r\n』表示換行);
2.從文字檔案讀到換行時(』\r\n』)會自動將』\r』捨去,只保留』\n』.
例如,執行下面的**,
file *fp = fopen("test.txt","w+");
fprintf(fp, "abc\ndef");/*寫入7個字元*/
得到的檔案大小為8位元組,用winhex開啟結果為:
可以看到檔案裡有8個字元,包括ascii碼為0x0d的』\r』和0x0a的』\n』。
同理,重新開啟這個檔案進行讀取,會發現無法讀取到』\r』字元只能讀到』\n』。
寫二進位制檔案,寫入的是什麼就是什麼,並不會增加任何東西。
例如,執行下面的**,
file *fp = fopen("test.txt","wb+");
fprintf(fp, "abc\ndef");/*寫入7個字元*/
得到的檔案大小為7位元組,用winhex開啟結果為:
可以看到檔案裡僅有寫入的7個字元。
同理,讀二進位制檔案,讀到的是什麼就是什麼,並不會捨去任何東西。例如,開啟3.1中的檔案,是可以同時讀到』\r』字元和』\n』字元的。
鍵盤上的enter鍵對應的字元是』\r』,而enter鍵還有額外很多功能,例如,將控制台輸入寫入緩衝區,並將』\n』寫入緩衝區。因此有如下結論:
二進位制檔案和文字檔案
通常,我們喜歡把檔案分為二進位制檔案 binary file 和文字檔案 text file 兩類。但事實上,所有檔案在計算機上都是以二進位制方式進行儲存的,因此二者並無本質上的區別,它們的區別僅在於對檔案內容的解釋方式上。a 文字檔案,就是根據字元編碼規則解碼後,能夠全部解碼為文字字元的 二進位制...
VC 二進位制檔案和文字檔案
檔案在計算機記憶體中以二進位制表示的資料在外部儲存介質上的另一種存放形式。檔案通常分為二進位制檔案和文字檔案。二進位制檔案是包含在 ascii 及擴充套件 ascii 字元中編寫的資料或程式指令的檔案。一般是可執行程式 圖形 圖象 聲音等等檔案。文字檔案 也稱為ascii檔案 它的每乙個位元組存放的...
二進位制檔案和文字檔案的區別
原文 一 文字檔案與二進位制檔案的定義 將檔案看作是由乙個乙個位元組 byte 組成的,那麼文字檔案中的每個位元組的最高位都是0,也就是說文字檔案使用了乙個位元組中的七位來表示所有的資訊,而二進位制檔案則是將位元組中的所有位都用上了。這就是兩者的區別 接著,第二個問題就是檔案按照文字方式或者二進位制...