文字檔也叫做ASCII碼檔案,與以‘文本方式’開啟檔案不是同一個概念!文字檔儲存的是ASSCII碼字元,即儲存在磁碟上只佔用二進位的0x20--0x7e。另外,還有斷行符號(0x0d),換行(0x0a),TAB(0x09)等,所以有可壓縮的空間。
換行和斷行符號是不同的,而且在不同的作業系統,解釋也不相同。‘/n’一般會作業系統被翻譯成"行的結束",即LF(Line-Feed);‘/r’會被翻譯成"斷行符號",即CR(Cariage-Return)
斷行符號(CR)和換行(LF)符都是用來表示“下一行”的。而標準沒有規定要使用哪一個。於是產生了三種不同的用法:
(1) Dos和windows採用斷行符號+換行(CR+LG)表示下一行
(2) UNIX採用分行符號(LF)表示下一行
(3) MAC機採用斷行符號符(CR)表示下一行。
當在不同的系統間傳遞檔案,就要涉及格式的轉換。
文本方式和二進位方式的最大區別在於文本方式對於'/n'分行符號的理解不同
(1)在DOS平台下,該字元會被展開成<CR>< LF>兩個控制字元(相當於"/r/n"),在ASCII字元集下是 0DH,0AH
(2)在UNIX平台下,僅僅是<LF>,不會展開。
(3)在二進位方式下,不管是什麼平台,'/n'都是精確的<LF>。
在linux/unix 系統上,只有一種檔案類型的系統,帶b字母的模式和對應的不帶b字母的模式是相同的。(UNIX文字檔通常不包含Ctrl+Z和/r)
關於EOF:
EOF可以作為文字檔的結束標誌,但不能作為二進位檔案的結束符.feof函數既可以判斷二進位檔案,又可以判斷文字檔. EOF在Windows下是ctrl+z,linux下是ctrl+D.
1, Change the default translation mode directly by setting the global variable _fmode in your program. The initial default setting of _fmode is _O_TEXT, for text mode.
2,_O_TEXT sets text (translated) mode. Carriage return–linefeed (CR-LF) combinations are translated into a single linefeed character on input. Linefeed characters are translated into CR-LF combinations on output. _O_BINARY sets binary (untranslated) mode, in which these translations are suppressed. MS-DOS文字檔用斷行符號符和分行符號的組合/r/n表示行尾。Macintosh文字檔使用只用一個斷行符號符/r來表示行尾。C程式使用/n表示行尾。所以,在C程式以文本方式開啟一個MS-DOS文字檔時,會將/r/n轉換為/n,在寫入檔案的時候它會將/n轉換為/r/n。(如果以二進位方式開啟該檔案,則C程式將看到/r和/n兩個字元。)而對於Macintosh文字檔的文本視圖,在讀取檔案時它會將/r轉換為/n,在寫入檔案的時候它會將/n轉換為/r。