我想知道我們用于在 C 中打開檔案的模式(文本或二進制)是否真的很重要。
例如,一般情況下,我們使用 fread 和 fwrite 進行二進制模式的讀寫。當我們以文本模式打開檔案時,我們可以使用這些功能嗎?
除此之外,通常我們可以使用 fscanf 和 fprintf 進行文本模式的讀寫。如果我們以二進制模式打開檔案,我們可以使用這些函式嗎?
以文本或二進制模式打開檔案的后果是什么?
uj5u.com熱心網友回復:
在POSIX兼容的作業系統(例如 Linux、MacOS)上,二進制模式和文本模式沒有區別。
但是,在 Microsoft Windows 上并非如此。
在內部,Microsoft Windows 上的文本檔案通常使用\r\n(回車后跟換行)來終止一行。如果您以二進制模式打開一個文本檔案,您將因此看到\r\n每一行的末尾(可能除了最后一行)。另一方面,如果您以文本模式打開文本檔案,C 運行時庫將自動將所有內容轉換\r\n為\n.
作為這種轉換的結果,有效檔案大小(即在fgetc到達檔案末尾之前可以呼叫的次數)根據您使用的是文本模式還是二進制模式而有所不同。
這種翻譯的另一個后果是,您不能fseek在文本模式下使用該功能來跳轉檔案中的一定數量的字符。這僅在二進制模式下才有可能。原因是在文本模式下,兩個檔案位置之間的位元組數可能與二進制模式不同。
Microsoft Windows 上的另一個問題是,在文本模式下,位元組值'\x1A'被解釋為檔案的結尾。因此,如果您在文本模式下打開一個二進制檔案,那么該檔案可能看起來比實際短很多,如果它恰好包含一個值為 的位元組'\x1A'。
但是,除了上面提到的問題之外,您還可以在兩種模式下隨意使用fread、fwrite和。但是格式化的 I/O 函式和可能對以文本模式打開的文本檔案更有用,而未格式化的 I/O 函式和可能對以二進制模式打開的二進制檔案更有用。fprintffscanffprintffscanffreadfwrite
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/505054.html
下一篇:洗掉文本檔案中的多行
