文本打开方式和二进制打开方式的区别是什么?
在學習了 C++ 文件流對象使用 open() 打開文件后,我們知道它的第二個參數是一個字符串,用來表示文件打開方式,即如果使用 ios::binary,則表示以二進制方式打開文件;反之,則以文本文件的方式打開文件。
文本文件和二進制文件的區別
根據我們以往的經驗,文本文件通常用來保存肉眼可見的字符,比如 .txt文件、.c文件、.dat文件等,用文本編輯器打開這些文件,我們能夠順利看懂文件的內容。
二進制文件通常用來保存視頻、圖片、程序等不可閱讀的內容,用文本編輯器打開這些文件,會看到一堆亂碼,根本看不懂。
但是從物理上講,二進制文件和字符文件并沒有什么區別,它們都是以二進制的形式保存在磁盤上的數據。
我們之所以能看懂文本文件的內容,是因為文本文件中采用的是 ASCII、UTF-8、GBK 等字符編碼,文本編輯器可以識別出這些編碼格式,并將編碼值轉換成字符展示出來。
而二進制文件使用的是 mp4、gif、exe 等特殊編碼格式,文本編輯器并不認識這些編碼格式,只能按照字符編碼格式胡亂解析,所以就成了一堆亂七八糟的字符,有的甚至都沒見過。
如果我們新建一個 mp4 文件,給它寫入一串字符,然后再用文本編輯器打開,你一樣可以讀得懂,有興趣的讀者可以自己試試。
總的來說,不同類型的文件有不同的編碼格式,必須使用對應的程序(軟件)才能正確解析,否則就是一堆亂碼,或者無法使用。
兩種打開方式的區別
文本方式和二進制方式并沒有本質上的區別,只是對于換行符的處理不同。
在 UNIX/Linux 平臺中,用文本方式或二進制方式打開文件沒有任何區別,因為文本文件以 \n(ASCII 碼為 0x0a)作為換行符號。
但在 Windows 平臺上,文本文件以連在一起的 \r\n 作為換行符號。如果以文本方式打開文件,當讀取文件時,程序會將文件中所有的 \r\n 轉換成一個字符 \n。也就是說,如果文本文件中有連續的兩個字符是 \r\n,則程序會丟棄前面的 \r,只讀入 \n。
同樣當寫入文件時,程序會將 \n 轉換成 \r\n 寫入。也就是說,如果要寫入的內容中有字符 \n,則在寫入該字符前,程序會自動先寫入一個 \r。
因此在 Windows 平臺上,如果用文本方式打開二進制文件進行讀寫,讀寫的內容就可能和文件的內容有出入。
總的來說,Linux 平臺使用哪種打開方式都行;Windows 平臺上最好用 “ios::in | ios::out” 等打開文本文件,用 “ios::binary” 打開二進制文件。但無論哪種平臺,用二進制方式打開文件總是最保險的
總結
以上是生活随笔為你收集整理的文本打开方式和二进制打开方式的区别是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ open 打开文件(含打开模式一
- 下一篇: C++ close()关闭文件方法详解