`
cppblogs
  • 浏览: 2977 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

C语言文本方式和二进制方式打开文件区别

    博客分类:
  • C
c 
阅读更多

我们都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎么还存在差别呢?我觉得,对于编程人员,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制)打开这个文件用什么函数读写这个文件(读写函数),怎么判断读到这个文件结尾

具体的说:
1。以哪种方式打开一个文件?
ANSI C规定了标准输入输出函数库,用fopen()函数打开文件。fopen()函数的调用方式一般为:

FILE *fp;

fp=fopen(文件名,使用文件方式);

使用文件方式见下表:

使用文件方式

含义

"r"(只读) 为输入打开一个文本文件
"w"(只写) 为输出打开一个文本文件
"a"(追加) 为追加打开一个文本文件
"rb"(只读) 为输入打开一个二进制文件
"wb"(只写) 为输出打开一个二进制文件
"ab"(追加) 为追加打开一个二进制文件
"r+"(读写) 为读/写打开一个文本文件
"w+"(读写) 为读/写创建一个文本文件
"a+"(读写) 为读/写打开一个文本文件
"rb+"(读写) 为读/写打开一个二进制文件
"wb+"(读写) 为读/写创建一个二进制文件
"ab+"(读写) 为读/写打开一个二进制文件
同一个文件从磁盘读取文件到内存(程序数据区或者缓存区)时,两种方式下,内存中的内容一般不相同,这就是两种打开方式的实质性差别
这里要说一个背景,那就是在windows下,它会做一个处理,就是写文件时,换行符会被转换成回车,换行符存在磁盘文件上,而读磁盘上的文件时,它又会进行逆处理,就是把文件中连续的回车,换行符转换成换行符。
因此,在读取一个磁盘文件时,文本方式读取到文件内容很有可能会比二进制文件短,因为文本方式读取要把回车,换行两个字符变成一个字 符,相当于截短了文件。但是为什么仅仅是可能呢?因为可能文中中不存在连着的45,42这两个字节(45是CR回车的ASCII码,42是换行符CL的 ASCII码),也就不存在“截短”操作了,因此读到的内容是一样的。
具体的来说,文件文件(以文本方式写的),最好以文本方式读。二进制文件(以二进制方式写的),最好以二进制方式读。不然可能会不正确。上面的已经分析了。
2.以什么函数读写文件?
数据怎么在磁盘上写不是由文件打开方式决定的,而是由写函数决定的。数据怎么从磁盘上读也不是由文件打开方式决定的,而是由读函数决定的。
上面说的数据怎么写是说指,一种类型的变量是怎么存的?比如int 12,可以直接存12的二进制码(4个字节),也可以存字符1,字符2.
数据怎么读的是指,我要读一个int变量,是直接读sizeof(int)个字节,还是一个字符一个字符的读,直到读到的字符不是数字字符。
C里面有两组文件读写函数恰好支持上面两种方式的读写:
1.fread(buffer,size,count,fp),fwrite(buffer,size,count,fp)。用来读写一个数据块。它对应的是第一种存储方式。直接按类型的字节长度指定读写的字节数。
2fprintf函数和fscanf函数.它对应的是第二种读写方式。即以字符的方式读写。(fprintf函数、fscanf函数与printf函数、scanf函数的作用相仿,都是格式化读写函数。fprintf和fscanf函数的读写对象是磁盘文件,而printf和scanf函数的读写对象是终端。)
它们的一般调用格式为:

fprintf(文件指针,格式字符串,输出列表);

fscanf (文件指针,格式字符串,输入列表);

3怎么判断文件尾?

在 C语言,或更精确地说成 C标准函式库中,有一个特别的字符EOF(stdio.h中这个定义#define EOF (-1),它表示:文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志。

但是,C语言中,当把数据以二进制形式存放到文件中时,就会有-1值的出现,此时不能采用EOF作为二进制文件的结束标志。为解决这个问题,ANSI C提供一个feof函数,用来判断文件是否结束。如果遇到文件结束,函数feof(fp)的值为1,否则为0.

feof函数既可用以判断二进制文件是否结束,也可以用以判断文本文件是否结束。但是要注意feof用以判断文本文件尾时,如果代码编写不当,可能会把文本文中中的文件结束符EOF也读取出来了;具体见http://baike.baidu.com/view/656648.htm

4.知道一个文件是文本文件,还是二进制文件,更多的“提醒”我们,应该选择哪种读写函数。

正如2所说的,数据怎么存不是由文件打开方式决定的,而是由读写函数决定的。

比如说,我们以二进制文件的方式打开一个文件(实际上只是指明了要进行换行符的转换),它更多的是代表一种理念(虚的):我“希望” 这个文件里面的数据是这样的,int类型占4字节,char占1个字节。这种模式下,我用fread(buffer,size0f(int),1,fp) 读取一个int到int变量中。

我们记住

我们在对一个文件进行操作以前,首先,我们要清楚这个文件到底是文本文件还是二进制文件文件文件用文本方式打开,二进制文件用二进制方式打开

如果我们要操作一个二进制文件,那么我们就以二进制方式打开(理论上也可以以文件方式打开,但是如果写的二进制数据里面有45时,会转化成45,42存储,见1.这是很有可能发生的)。同时读写的时候用fread,fwrite这两个函数。

如果我要操作一个文本文件,那么我们就以文本的方式打开(理论上也可以以二进制方式打开,但是不保险)。同时读写的时候用读写字符的那些函数fprintf,fscanf ,fgetc,fputc,putw,getw,fgetc,fputs.

转:http://blog.csdn.net/sszgg2006/article/details/7420319

分享到:
评论

相关推荐

    c语言中二进制与文本打开文件的区别

    我看了很多,只有这个一针见血,读后感就觉很清晰,不会更加迷惑

    C语言采用文本方式和二进制方式打开文件的区别分析

    稍微了解C程序设计的人都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎么还存在差别呢?对于编程人员来说,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制)打开...

    C语言 软件设计 分数统计 打字程序 文本编辑器 加密 进制转换器

    (2)保存、打开指定位置的文本文件; (3)具有输入输出界面。 四、 加密(10) 要求:(1)输入任意一段明文M,以及密钥K; (2)根据以下公式将其转换为密文C。 Ci = mi + K ,其中i = 0,1,……n-1 , K 为密钥; ...

    C语言 软件设计 分数统计 打字程序 文本编辑器 加密 进制转换器

    (2)保存、打开指定位置的文本文件; (3)具有输入输出界面。 四、 加密(10) 要求:(1)输入任意一段明文M,以及密钥K; (2)根据以下公式将其转换为密文C。 Ci = mi + K ,其中i = 0,1,……n-1 , K 为密钥; ...

    C语言程序设计题库 第十一章:数据文件的使用

    文件可以分为文本文件和二进制文件两种类型: 文本文件(Text File):文本文件是由字符组成的文件,可以使用文本编辑器打开并查看其内容。文本文件中的数据是以文本形式存储的,例如ASCII码或Unicode编码。C语言中...

    C语言文件操作及函数大全

    其意义是打开C驱动器磁盘的根目录下的文件file_a, 这是一个二进制文件,只允许按二进制方式进行读操作。两个反斜线“\\ ”中的第一个表示转义字符,第二个表示根目录。"\\"对于打开磁盘下的文件,要注意两个双斜线...

    C语言文件输入与输出

    C语言输入输出函数 1.fopen()函数 fopen函数用于打开文件,其调用格式为:FILE*fopen(...对磁盘来说就是文本文件和二进制文件。本软件为了便于让读者易理解TurboC2.0语言而没有对流和文件作特别区分。

    C语言文件操作相关资料

    C语言文件操作部分相关资料,主要讲解内容:文件的分类,文件的打开与关闭,文件的读写

    C语言-文件-知识要点.pdf

    文件处理在编程中是一个基础且关键的部分,能够帮助开发者读取、写入和操作各种类型的文件,如文本文件、二进制文件等。以下是对这份资源的概括: 知识要点和内容: 文件基本操作: 学习如何打开、创建、关闭文件...

    C语言程序设计标准教程

    6. 把一个文本文件读入内存时,要将ASCII码转换成二进制码, 而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换。 7. 标准...

    C语言文件打开的模式

    1、文件分为ASCII文件和二进制文件,ASCII文件也称文本文件,由一系列字符组成,文件中存储的是每个字符的ASCII码值。 2、FILE *fp; FILE是文件类型标识符,是C编译系统定义好的一个结构体类型,结构体中含有...

    c语言打开文件函数使用方法

    打开方式:“r”(只读) 为输入打开一个文本文件“w”(只写) 为输出打开一个文本文件“a”(追加) 向文件文件尾添加数据“rb”(只读) 为输入打开一个二进制文件“wb”(只写) 为输出打开一个二进制文件“r+”(读写) 为...

    C语言文件操作大全

    1、文件分为ASCII文件和二进制文件,ASCII文件也称文本文件,由一系列字符组成,文件中存储的是每个字符的ASCII码值。 2、FILE *fp; FILE是文件类型标识符,是C编译系统定义好的一个结构体类型,结构体中含有文件名...

    13.第十三章 文件.txt

    C语言把数据看作是一连串的字符(字节),根据数据的组成形式,分为ASCII文件和二进制文件。 文本文件又称ASCII文件,每个字节存放一个ASCII码,代表一个字符。如1、2的ASCII码分别为49、50,所以整数12用ASCII...

    吕鑫:最博大精深的C语言视频教程 第19天 【第2堂课】全面讲解C语言f族函数的功能

    1、讲解fopen函数打开文件时使用文本模式和二进制模式的区别; 2、全面讲解各种C语言f族函数的功能和调用方法;

    哈夫曼编码C语言实现

    可以将文本文件使用huffman编码的方式加以压缩的小程序,可是输出压缩比例与压缩时间,由于使用的是文本打开方式,从而只能打开文本文件,可以自行改为二进制打开以实现任意文件压缩,由于机制简单,故请有需要者...

    明解C语言(第3版)入门篇.[日]柴田望洋(带详细书签).pdf 【半高清】

    文本文件和二进制文件 383 在二进制文件中保存实数 384 显示文件自身 386 13-3 printf函数与scanf函数 389 printf函数:带格式输出 389 scanf函数:带格式的输入 393 总结 397 附录 C语言简介 399 C语言的...

    C语言入门经典(第4版)--源代码及课后练习答案

    12.2.1 打开文件 463 12.2.2 文件重命名 465 12.2.3 关闭文件 465 12.2.4 删除文件 466 12.3 写入文本文件 466 12.4 读取文本文件 467 12.5 将字符串写入文本文件 470 12.6 从文本文件中读入字符串 471 ...

    C语言实例解析精粹(第二版) 光盘代码

    C语言实例解析精粹(第二版) 光盘代码 本文件包括以下内容: ※ 1、文件说明 ※ 2、源码操作说明 ※ 3、光盘目录清单 ◎ 源码操作说明 源代码使用方法是(以实例1为例): 将该实例的源码,比如实例1的1.c文件(可以...

Global site tag (gtag.js) - Google Analytics