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

 

引用\[1\]提供了一个C语言的例子,展示了如何使用fopen函数来打开文件。在C++,可以使用fstream库来进行文件操作。fstream库提供了ifstream、ofstream和fstream三个类,分别用于读取文件、写入文件和读写文件。要打开文件,可以使用成员函数open(),并指定文件名和打开模式作为参数。打开模式可以是in(读取)、out(写入)或app(追加),也可以与binary(二进制)组合使用。例如,要以只读方式打开一个文本文件,可以使用以下代码: ```cpp #include <fstream> using namespace std; int main() { ifstream file; file.open("filename.txt", ios::in); if (!file) { cout << "Cannot open file!" << endl; return 1; } // 文件操作代码 file.close(); return 0; } ``` 引用\[2\]提供了一些打开文件时可以使用的模式。例如,"r"表示只读方式打开文件,"w"表示只写方式打开文件(如果文件不存在,则创建一个新文件),"a"表示以追加方式打开文件。可以根据需要选择适合的模式。 请注意,C++的文件操作与C语言的略有不同。在C++,可以使用fstream库提供的类和成员函数来进行文件操作。 #### 引用[.reference_title] - *1* *2* [C++文件操作:fopen / fread / fwrite](https://blog.csdn.net/shenziheng1/article/details/79472102)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [fopen c++打开文件](https://blog.csdn.net/jiangxinyu/article/details/7568082)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值