文本文件與二進制文件

這裏談談文本文件與二進制文件以及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等等。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章