檔案開啟的文字模式和二進位制模式

2021-05-22 21:39:32 字數 978 閱讀 9347

首先要明白一點,就是無論你用哪種語言進行程式設計,也無論你用哪個函式進行檔案操作(庫函式也好,直接作業系統api也好),最終的檔案開啟的操作都是由作業系統來進行的,因此各種語言的情況從本質上來說都是相同的。

用二進位制模式開啟乙個檔案的時候,檔案本身的內容和你編寫程式時用函式讀到的內容完全相同(或者說和磁碟上的內容完全相同)。

但是如果用了文字模式,那麼作業系統在將檔案內容傳給上層程式時,或者上層程式通過作業系統向檔案寫入內容時,作業系統都會預先進行一層預處理(或者說轉義),具體過程依賴於作業系統的實現。在windows+vc下,最常見就是將回車符"/r/n"解釋成"/n"(讀出時),將"/n"解釋成"/r/n"(寫入時)。而在linux下沒有這層轉換,這也是 windows和linux文字檔案不通用的原因。

除此以外,兩種開啟方式其實是大同小異的。

舉個例子,設有一檔案file.dat內容為"abc/r/nabc",

那麼在下面的**中,讀到的內容將是"abc/r/nabc":

fp = fopen("file.dat","rb");

while(fgetc(fp)!=eof);

而在下面的**中,讀到的內容卻是"abc/nabc":

fp = fopen("file.dat","rt");

while(fgetc(fp)!=eof);

還有一點要注意的是關於檔案定位的問題。在文字模式下最好少用fseek,因為有了庫函式的那層轉義的存在,fseek會有一些近乎於奇怪的行為。我在windows+vc下試驗發現,儘管在文字模式下"/r/n"還是被當作兩個字元計算的,但是當你把檔案指標定位到"/r/n"處時,讀到的兩個位元組都是"/n"。

另附測試小片段:

void test(void)

printf("//r=%d/t//n=%d/n", '/r', '/n');

while((ch = fgetc(fp)) != eof)

}int _tmain(int argc, _tchar* argv)

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

這幾個概念很常見但是也容易搞混。前兩者是相反的意思,後兩者是一對。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...

文字模式與二進位制模式

c語言是unix的產物,因此c對檔案的處理與unix環境適配。c把檔案看作是一系列連續的位元組,每個位元組都能被單獨讀取。但由於其他環境可能無法完全對應此模型,c提供兩種模型 文字模式和二進位制模式。關於文字模式和二進位制模式 所有檔案的內容 在磁碟上 都以二進位制表示。因為編碼方式不同,導致展現的...