C中檔案操作的文字模式和二進位制模式,到底有啥區別?

2022-05-15 08:59:15 字數 1012 閱讀 7487

在c中,使用fopen開啟檔案有兩種模式:一種是文字模式,一種是二進位制模式。那這兩種模式之間有什麼區別,是不是使用文字模式開啟的檔案就只能使用文字函式比如fprintf來操作,而使用二進位制開啟的檔案就只能使用二進位制函式比如fwrite來操作呢?

答案是否定的。c裡面之所以有文字模式和二進位制模式,完全是出於跨平台的需要。

文字模式的意義

眾所周知,在windows下,ctr+z這個字元用來表示乙個檔案的結尾,而unix下使用ctr+d。此時,如果使用文字模式開啟乙個檔案,當讀到ctr+z這個字元時,c就能識別出這是檔案結尾的標誌,在unix系統下也是一樣,當讀到ctr+d,c也知道這事檔案結尾,這樣就能相容windows和unix兩個平台了。而如果使用二進位制模式開啟同樣的檔案,當在windows下讀到ctr+z,或者是在unix下讀到ctr+d,都只會被當成乙個純粹的字元來看待。

同樣的事情也發生在newline的表示上。在unix下,newline使用\n表示,在windows下,newline使用\r\n表示,而在mac下,newline使用\r表示。這樣,當乙個檔案使用文字模式開啟時,如果是讀取檔案,c會依據平台將\r\n或者\r自動轉換成\n,在寫入檔案時,c會將\n依據平台自動轉換成\r\n或者\r,這樣就完成了跨平台的操作。而如果使用二進位制模式來操作檔案,c不會自動做這樣的轉換,讀到\r\n就是\r\n,寫入\n也不會自動變成\r\n。

fprintf和fwrite的區別

fprintf和fwrite都是將內容寫入到檔案,無**件是以文字模式開啟,或者二進位制模式開啟,它們都不關心,總之寫入到檔案中的都是一段0和1的編碼,只是寫入的內容會不一樣。比如對於整數12345,fprintf和fwrite寫入時,檔案內容如下圖所示:

上圖表示的區別很明顯,fprintf寫入時是將12345的每一位的字元編碼寫入檔案,而fwrite是直接將12345在記憶體中的表示寫入檔案。

C中檔案操作的文字模式和二進位制模式,到底有啥區別?

在c中,使用fopen開啟檔案有兩種模式 一種是文字模式,一種是二進位制模式。那這兩種模式之間有什麼區別,是不是使用文字模式開啟的檔案就只能使用文字函式比如fprintf來操作,而使用二進位制開啟的檔案就只能使用二進位制函式比如fwrite來操作呢?答案是否定的。c裡面之所以有文字模式和二進位制模式...

文字模式 二進位制模式 文字檔案 二進位制檔案

這幾個概念很常見但是也容易搞混。前兩者是相反的意思,後兩者是一對。1.文字模式 textmode 和二進位制模式 binarymode 的 區別0.無論你用哪種語言進行程式設計,也無論你用哪個函式進行檔案操作 庫函式也好,直接作業系統api也好 最終的檔案開啟的操作都是由作業系統來進行的,因此各種語...

讀寫文字檔案和二進位制檔案 二進位制模式

fstream binary開啟 新行採用 lf 作為乙個位元組 關閉 新行採用 cr lf 組合,作為乙個位元組。關於 cr lf 參見 以下是 c primer 第四版中的一段 1 intmain 29 10 ifstream pos type ptendmark finout.tellg 11...