C中文件操作的文本模式和二進制模式,到底有啥區別?


在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在內存中的表示寫入文件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM