這里談談文本文件與二進制文件以及C語言讀寫這兩種文件的標准接口。
【具體到物理保存時都是二進制的,關鍵是保存前對數據的編碼有區別。】
文本文件與二進制文件在計算機文件系統中的物理存儲都是二進制的,也就是在物理存儲方面沒有區別都是01碼,這個沒有異議,他們的區別主要在邏輯存儲上,也就是編碼上。
文本文件格式存儲時是將值作為字符然后存入其字符編碼的二進制,文本文件用‘字符’作為單位來表示和存儲數據,比如對於1這個值,文本文件會將其看做字符‘1’然后保存其ASCII編碼值(這里假定是ASCII編碼),這樣在物理上就是0x31這個二進制值,而若是二進制保存1,則直接保存其二進制值,比如如果程序中是處理1為整數則保存的二進制值就是 0x00000001 (4字節)。
當然如果程序本來就是按字符保存的 也就是 char ch ='1' ; 則二進制保存后值就是其ASCII碼,因為該變量的二進制本來就是其ASCII碼。可以總結出二進制文件就是值本身的編碼,那么就是不定長的編碼了,因為值本身就是不等字節的,如整數4個字節那么保存在二進制文件就是這四個字節的原生二進制值。
綜上,可以知道文本文件與二進制文件就是編碼方式不一樣而已,而這個是用戶行為,把一個數據以什么樣的編碼(字符還是值本身)存入文件是由用戶主動選擇的,也就是寫入的接口選擇,如果以二進制接口方式寫入文件那么就是一個二進制文件,如果以字符方式寫入文件就是一個文本文件了。既然有寫入時候的編碼也就會有讀出的編碼,只有兩個編碼對應才能讀出正確的結果,如用記事本打開一個二進制文件會呈現亂碼的,這里稍微提一下后綴名,后綴名並不能確定其是否就是文本文件,二進制文件也可以是txt后綴名,后綴名只是用來關聯打開程序,給用戶做備注用的,與文件的具體編碼沒有關系。
可以使用字符接口讀寫二進制文件,只需要做些處理即可,所以所謂的二進制文件,文本文件主要體現在讀寫方式這里。
此外windows有一個明顯的區別是對待文本文件讀寫的時候,會將換行 \n自動替換成 \r\n。
最后文本文件和二進制文件主要是windows下的概念,UNIX/Linux並沒有區分這兩種文件,他們對所有文件一視同仁,將所有文件都看成二進制文件。
標准I/O庫中 主要使用 fread/fwrite來讀寫二進制文件,而對於文本文件可以使用 fread/fwrite fgetc/fputc fprintf等等。
