C++中關於text file和binary file

  ASCII文件也稱爲text文件,每一個字節存放一個ascii代碼,代表一個字符。二進制文件是把內存中的數據按其在內存中的存儲形式原樣輸出到磁盤文件存放。如一個整數10000  ,在內存中佔2個字節,如果按ascii形式輸出,則佔5個字節分別存放字符1,0,0,0,0,而按二進制形式輸出則佔2個字節,用ascii形式與字符一一對應,便於對字符處理,輸出字符,但佔存儲空間較大,而且要花費轉換時間(二進制形式與ascii碼形式之間的轉換)

   文件結束標誌符:EOF(-1),對於文本文件,當讀入的字符爲EOF時,就表明讀入的不是正常的字符而是文件結束符。由於ANSI C允許用緩衝文件系統處理二進制文件,對於二進制文件,讀入的字符有可能是-1,而這又是EOF的值,這就出現了讀入有用字符而被處理爲文件結束的情況。爲了解決這個情況,ANSI C提供了一個feof(fp)來判斷文件是否真的結束,用feof(fp)來測試fp所指向的文件當前狀態是否“文件結束”,是,函數feof(fp)返回1(真),否,返回0(假)

 

 

 

 

ASCII文件包含text文件和binary文件,只要這些文件的編碼是ASCII字符集的。與binary文件相對的概念叫做“text文件”!

 

關於下面這個問題:

   在unix,linux等類unix下無TEXT BINARY之分。
因爲含義可見文件的行結束是一個0x0a.
其他系統下必須區分。fopen時要指定是ascii或binary.以便文件讀入,輸出是進行必要的格式轉換
fopen的時候不指定ascii,Windows下的"rb","rt"恰恰對應的是birany和text。
如果你說不知道什麼是"rt"?rt=r,查一下MSC/TC的文檔。VC的我沒查過,不知道還有沒有"rt"之說。

網友的回答:

(1)

   以下的"文本文件"==text file   "二進制文件"==binary file
第一,ascii文件!=文本文件.文本文件是可打印的字符加上控制字符.
第二,不同的平臺使用的打印字符集可能不同,控制字符也可能不同
第三,ascii標準並不能約束文本文件.
第三,不同平臺上的文本文件的不同在於控制字符的不同
第四,對同於一個平臺在系統級別或者說系統調用級別上來說沒有文本文件和二進制文件的區別.
第五,文本文件是C語言標準庫爲統一各個平臺上控制字符和應付以後的發展提出的概念.

所以flw所謂的相同,在C語言標準I/O庫層次上看是對的,站在系統調用的角度看,就是錯的.所以總起來說是錯的

系統向打印機,終端,控制檯等寫文本時候,驅動程序依據控制字符來驅動設備.你的文本文件要輸出一定的格式你就必需向文件中寫入控制字符.由於在不同的平臺上控制字符不同的可能性和事實上的存在,C語言標準IO庫纔會弄出個text file來,這樣只用一套控制字符就可以了.這樣做的目的是IO庫屏蔽掉平臺之間的差異,C程序具有可移植性.
但C語言IO庫這套控制字符從哪裏來呢?他的控制字符是ascii標準嗎?不是.拿'/n'來說,它在ascii標準中只是起換行作用的.但IO庫把它作爲/r/n.這足以說明這個控制字符不是ascii標準的.

(2)

我引用一個文件的定義:
[quote]
A file stored in binary format. A binary file is computer -readable but not human-readable. All executable programs are stored in binary files, as are most numeric data files. In contrast, text files are stored in a form (usually ASCII) that is human-readable.

 

我再引用一個
Binary File
A binary file, unlike an ASCII file, contains more than plain text(純文本文件). It may contain additional code information for photos, sounds, a spreadsheet, or formatted word-processing text. Like an ASCII file, a binary file is made up of machine-readable symbols that represent 1s and 0s. Binary files include sound files, graphics files, and software, and are frequently called binaries.

 

(3)

你能認識到所有的數據,只不過是“二進制流”,這很好,說明你已經能夠“透過現象看本質”了,可是,看明白“本質”以後,難道就不管“現象”了?

(4)

所有的文件都是二進制文件,
文本文件只不過是二進制文件一個子集而已

 

簡單的說,明白的人,啥時候都不會在這個文件操作上翻跟頭。
其實就是,一個二進制流。你願意原封不動的看,那就是二進制文件。你願意去在意特定的“行”的概念,以及行和行之間的標誌(各個系統之間不同),那就是文本文件

(5)

無論任何文件,都是由一個個字節組成的,不管是在存儲介質上存儲,還是在網絡中傳輸。我們通常意義上的文本文件,實際上是隻包含可見字符(和回車換行等控制字符)的文件。而ascii的嚴格定義是:
ASCII is the American Standard Code for Information Inter-
       change.  It is a 7-bit code. Many 8-bit codes (such as ISO
       8859-1, the Linux default character set) contain ASCII  as
       their  lower half.
0x00也是ASCII碼之一;但包含0x00的文件我們絕對不能稱之爲文本文件。在ftp中的asii方式與binary  實際上只是借用了一下定義而已,ascii方式在不同字符集間有轉換,如EBCDIC->;ascii,unix like text ->;win like text,而binary方式不作任何轉換。

 

 (6)

二進制與文本方式的區別不是這樣看的,兩者的主要區別,是文本方式允許在輸入或輸出時,對某些字符進行替換、增加或刪除等操作。在windows下,主要的區別就是寫入時/n會被替換爲/r/n,輸出時/r/n又會被重新組合爲/n。請看C89/C99關於兩種方式的規定:

A   text   stream   is   an   ordered   sequence   of   characters   composed   into   lines,   each   line
consisting   of   zero   or   more   characters   plus   a   terminating   new-line   character.   Whether   the   last   line   requires   a   terminating   new-line   character   is   implementation-defined.   Characters   may   have   to   be   added,   altered,   or   deleted   on   input   and   output   to   conform   to   differing   conventions   for   representing   text   in   the   host   environment.   Thus,   there   need   not   be   a   one   to-one   correspondence   between   the   characters   in   a   stream   and   those   in   the   external   representation.  

A   binary   stream   is   an   ordered   sequence   of   characters   that   can   transparently   record
internal   data.   Data   read   in   from   a   binary   stream   shall   compare   equal   to   the   data   that   were   earlier   written   out   to   that   stream,   under   the   same   implementation.   Such   a   stream   may,   however,   hav   e   an   implementation-defined   number   of   null   characters   appended   to   the   end   of   the   stream.

 

(7)

 

ASCII碼文件可在屏幕上按字符顯示,   例如源程序文件就是ASCII文件,用DOS命令TYPE可顯示文件的內容。   由於是按字符顯示,因此能讀懂文件內容。

  二進制文件是按二進制的編碼方式來存放文件的。   例如,   數5678的存儲形式爲:   00010110   00101110只佔二個字節。二進制文件雖然也可在屏幕上顯示,   但其內容無法讀懂。C系統在處理這些文件時,並不區分類型,都看成是字符流,按字節進行處理。   輸入輸出字符流的開始和結束只由程序控制而不受物理符號(如回車符)的控制。   因此也把這種文件稱作“流式文件”。

 

(8)二進制文件不對寫入或讀出的文件做格式轉換,

 

QTextStream takes care of converting the 8-bit data stored on disk into a 16-bit Unicode QString

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章