C语言程序设计(第三版) 教学课件 ppt 作者 罗坚 王声决 主编 第7章 文件

上传人:E**** 文档编号:89383204 上传时间:2019-05-24 格式:PPT 页数:111 大小:3.42MB
返回 下载 相关 举报
C语言程序设计(第三版) 教学课件 ppt 作者 罗坚 王声决 主编 第7章 文件_第1页
第1页 / 共111页
C语言程序设计(第三版) 教学课件 ppt 作者 罗坚 王声决 主编 第7章 文件_第2页
第2页 / 共111页
C语言程序设计(第三版) 教学课件 ppt 作者 罗坚 王声决 主编 第7章 文件_第3页
第3页 / 共111页
C语言程序设计(第三版) 教学课件 ppt 作者 罗坚 王声决 主编 第7章 文件_第4页
第4页 / 共111页
C语言程序设计(第三版) 教学课件 ppt 作者 罗坚 王声决 主编 第7章 文件_第5页
第5页 / 共111页
点击查看更多>>
资源描述

《C语言程序设计(第三版) 教学课件 ppt 作者 罗坚 王声决 主编 第7章 文件》由会员分享,可在线阅读,更多相关《C语言程序设计(第三版) 教学课件 ppt 作者 罗坚 王声决 主编 第7章 文件(111页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计(第3版),中国铁道出版社 China Railway Publishing House,普通高等教育“十一五”国家级规划教材,主 教 材:C语言程序设计(第三版) 书 号:ISBN 978-7-113-09512-3/TP.3113 中国铁道出版社 2009年2月 第3版 配套教材:C语言程序设计实验教程 书 号:ISBN 978-7-113-09513-0/TP.3114 中国铁道出版社 2009年2月 第1版,第7章 文 件,7.1 文件概述,7.3 文件的顺序读/写,7.2 打开文件与关闭文件,7.4 文件的定位与随机读/写,7.5 文件状态检查函数,结束放映,7.1 文

2、件概述,文件是程序设计中的一个重要概念,是实现程序和数据分离的重要手段,因为通过文件这种手段能使数据永久地存储、反复地使用。 程序在运行时,程序本身和数据一般都是存储在内存(亦称主存)中的,当程序运行结束后,存储在内存中的数据将被释放而不复存在。假如需要长久地保存程序运行时所需要的那些原始数据,或者保存程序运行后所产生的结果,则必须把这些数据以文件的形式存储到外存(亦称辅存)上 。,7.1.1 文件的概念,所谓文件,是指存储在外部介质上的一组相关数据的有序集合。这里所说的外部介质,亦称外存或者辅存,是指传统意义上的固定存储设备(如软盘、硬盘、磁带、光盘)和新型的移动存储设备(如闪存盘、活动硬盘

3、等)。例如,程序文件是程序代码的集合体,数据文件是数据的集合体。 计算机的外存可以存储许多文件,每个文件都有一个与之对应的文件名,操作系统是以文件为单位来对数据进行管理的。 在C语言中,文件被看作是字符序列(或者字节序列),它由一个个的字符(或字节)按照一定的顺序依次组成。此处的字符序列(或者字节序列)称为字节流。 流是对文件输入/输出的一种动态描述,因此C语言中的文件亦被称为流式文件。,7.1.2 文件的分类,从文件中读取数据的过程称为读文件,在文件中添加数据或者修改文件中已有数据的过程称为写文件,这是两种最基本的文件操作。C语言对文件的读操作和写操作均依赖于各自的标准文件输入函数与标准文件

4、输出函数。 在C语言中,不同的划分标准决定了不同的文件种类。 1从用户的角度来看,文件可分为普通文件和设备文件两种。 普通文件是指存储在外存上的数据的集合体,它既可以是源程序文件、目标文件或可执行文件,也可以是程序运行时所需的一组原始数据(或是程序运行后产生的一组结果),称前者为程序文件,称后者为数据文件。,设备文件是指与计算机主机相连的各种外部设备,如显示器、打印机、键盘等。在操作系统中,外部设备也被看作是文件来统一管理,把围绕它们进行的输入/输出操作,等同于对磁盘文件的读/写。当把打印机看作设备文件时,所进行的输出实际上就是打印;当把显示器看作设备文件时,所进行的输出就是屏幕显示;当把键盘

5、看成是设备文件时,所进行的输入实际上就是从键盘输入数据。 在C语言的stdio.h中定义了5种设备文件指针。,2从文件的读/写方式来看,文件可分为顺序读/写文件和随机读/写文件两种。 所谓顺序读/写文件,是指按照从头到尾的顺序依次读/写文件,即先读取文件中的第一条数据,然后读取第二条数据,依此类推,直至文件结束。在顺序读写文件时,不能随意读取其中的数据,换言之,若想访问文件中的第n条数据,则必须顺序地访问完此前的全部(n-1)条数据。 随机读/写文件的数据通常在格式上具有固定的长度,可以通过特定的技术来直接访问文件中的任意数据,譬如,可以把新得到的数据插入到文件中,替换当前位置的原有数据,这样

6、就实现了数据的更新。 在有的C语言教材中,把能进行顺序读/写的文件称为顺序文件,把能进行随机读/写的文件称为随机文件。,在文件的内部设置了一个指向当前读/写位置的指针,就像一部电梯中的楼层指示器来。对于顺序读/写文件,读/写位置指针总是按照字节的顺序由前往后移动,每当读完一个字符,指针自动移到下一个字符的位置上;而在随机读/写文件中,位置指针可以根据需要自由调整到文件的任意位置,当读完了一个字符之后,不一定非得要读下一个字符,此时需要通过重新调整位置指针的值,使其指向其他位置的字符,这样就实现了文件的随机访问。 定义在顺序文件上的操作都可以在随机文件中执行,而对文件的随机访问主要依赖以下三个标

7、准函数。 rewind():将文件的读写位置指针重新指向文件的开始。 fseek():改变文件的位置指针,使之指向某个指定位置。 ftell():返回当前位置指针的值。 上述三个库函数在标准头文件stdio.h中有定义。,3从文件编码的格式来看,文件可分为文本文件和二进制文件两种。 以ASCII码字符形式存储的文件称为文本文件,亦称ASCII文件。C语言的源程序文件(扩展名为.C)和用Windows“附件”程序组下的“记事本”创建的文件(扩展名为.txt)都是文本文件,而Word文档(扩展名为.doc)则不是文本文件。在文本文件中,存储一个字符需要一个字节,虽然处理字符比较方便,但文本文件一般

8、要占用较大的存储空间。 另一种文件是二进制文件。在二进制文件中,数据以二进制的形式存储,结构紧凑有利于节省磁盘空间。C语言中的目标文件(扩展名为.obj)和可执行文件(扩展名为.exe)都是二进制文件。在二进制文件中,一个字节并不直接对应着一个字符,它需要转换后才能以字符的形式输出。,下面以整数2500为例,介绍在这两种不同文件标准下的数据存储格式。 如果采用二进制形式存储,由于2500是一个short型的常量,故在内存中存储只需2个字节(16位),实际上存储的就是2500所对应的补码,如图7-1所示。 如果采用ASCII码形式来存储2500,由于涉及到2、5、0、0这4个数字字符的表示,故存

9、储时就需要4个字节,各个字符存储时都用对应的ASCII值表示,如图所示。,文本文件和二进制文件的主要区别: (1) 两种文件存储时所占的存储空间(即文件长度)不一样。采用ASCII码方式存储的文本文件所占的空间较多,而二进制文件的长度一般较短; (2) 两种文件需要的读/写时间不一样。文本文件在外存上是以ASCII 码方式存储的,而内存中的数据都是以二进制方式存储的,进行文件读/写时需要转换,因而存取速度较慢。对于二进制文件而言,数据本身就是二进制,与内存的存储格式一致,读入内存时无需转换,故存取速度较快; (3)允许使用Visual C+/Turbo C等自带的编辑器来创建一个新的文本文件(

10、或者编辑一个已有的文本文件),并且允许在命令提示符(亦称MS-DOS方式)下用type命令来显示某个已有的文本文件的内容。但一般不用编辑软件来创建或者修改二进制文件,更不能用type命令来显示其内容; (4)文本文件常用来保存输入数据及程序的最终结果,而二进制文件常用于暂存程序的中间结果,供另一程序读取。,7.1.3 文件缓冲区,缓冲型文件系统,也称格式化系统、文本系统或者高级系统,是指系统在处理文件时会自动地在内存中开辟一个大小确定的缓冲区,对文件进行读/写操作时都必须使用文件缓冲区。 文件缓冲区是内存的一部分,主要用于解决进行文件读/写操作时数据的暂存。一般地,缓冲区的大小和磁盘的存储单位

11、“簇”(cluster)是相同的,两者大小一致,因此文件缓冲区能对磁盘的整簇信息进行存储,便于读/写操作。 设立文件缓冲区的另一个原因是出于效率的考虑。和内存相比,外存的读/写速度比较慢,如果每读/写一个数据就要和外存进行一次数据传递,那么即使CPU的速度指标很高,整个程序的执行效率也会大打折扣,而通过文件缓冲区可以减少与外存打交道的次数,处理效率也随之提高。,下图描述了利用文件缓冲区在内存与外存之间进行文件读写的不同过程。在读文件时,首先把保存在外存中某个磁盘文件中的一块数据,一次性地读取到输入数据缓冲区中暂存,然后再从该缓冲区中取出程序所需的数据,分别送入程序数据区中的指定变量或数组元素。

12、在写文件时,也就是要把变量或数组的值输出到文件中去,这个过程实际上是先把数据从内存的程序数据区中读出来,然后暂存到输出数据缓冲区中,等到该缓冲区存满数据之后,再将缓冲区中的数据整块地传送到外存上的磁盘文件中去。,7.1.4 文件类型指针,文件类型指针是缓冲型文件系统中的一个重要概念。C语言系统规定,当前正在使用的文件的有关信息,如文件名、文件状态、数据缓冲区的位置、当前的文件读/写位置等,都被保存到一个特定的结构类型变量中,该变量称为文件结构变量(或FILE型变量)。在标准头文件stdio.h中就包含了FILE类型的声明。,在标准头文件stdio.h中有关FILE类型的定义 typedef s

13、truct short level; /*缓冲区“满”或“空”的程度*/ unsigned flags; /*文件状态标志*/ char fd; /*文件描述符*/ unsigned char hold; /*如无缓冲区则不读取字符*/ short bsize; /*缓冲区的大小*/ unsigned char *buffer; /*数据缓冲区的位置*/ unsigned char *curp; /*当前活动的指针*/ unsigned istemp; /*临时文件指示器*/ short token; /*用于有效性检查*/ FILE;,在C语言中,对于每个要存取的文件,事先都必须定义一个指向

14、FILE类型的指针变量,该指针变量称为文件类型指针变量(或FILE指针变量),有了它才能对文件进行操作。 文件类型指针变量(或FILE指针变量)的定义格式如下: FILE *文件指针变量名; 例如下面的语句就定义了一个名为fp的文件指针变量: FILE *fp; 本例中的变量名fp代表file pointer(即文件指针),在实际编程时使用fp这样的文件指针变量名很普遍。如果程序要同时处理3个文件,则需要分别定义3个不同的文件指针变量,可以这样来定义: FILE *fp1,*fp2,*fp3;,7.1.5 文件的操作流程,文件的读/写操作严格按照下面的顺序进行: 打开文件对文件进行读/写操作关

15、闭文件 打开文件的目的是将指定的文件与程序联系起来,为后续的文件读/写作准备。具体地,当为写操作而打开一个文件时,如果这个文件不存在,则系统会创建这个文件,并打开它;当为读操作打开一个文件时,该文件必须存在,否则将会出错。 读文件就是从已打开的数据文件中取出数据,然后再赋值给程序中的变量;写文件就是将程序的运行结果保存到指定的数据文件中,即传送至外存上该文件所对应的的存储区域中。 关闭文件用来撤销程序与数据文件之间原有的联系,它标志着文件操作过程的结束。 需要注意:上述三个处理过程必须严格按照顺序执行,没有打开的文件是不能进行读/写的,而当读/写文件结束后,如果还不关闭文件,则会造成数据的丢失

16、。,7.2 打开文件与关闭文件,在对文件进行读/写操作之前,必须先将文件打开,因为这样能够使文件与程序建立联系,进而实现对文件的读/写操作。当结束了对文件的读/写操作后,必须要关闭文件,这个过程实际上就是取消程序与指定文件之间已建立的联系。 打开文件的标准库函数为fopen(),关闭文件的标准库函数为fclose(),二者在stdio.h头文件中有定义。,7.2.1 打开文件的函数,函数原型:FILE *fopen(char *pname, char *mode) 函数功能:按指定的mode方式打开由pname指向的文件。 参数说明:pname为指向文件名字符串的指针,它指向被打开的文件;mode指定文件的处理方式(具体读/写方式见表7-2)。 返回值:如果文件能正常打开,则返回一个指向那个被最新打开的文件的指针;若打开文件失败,则函数返回NULL值(即空地址)。 空地址(NULL)也是标准头文件stdio.h中的一个宏,值已经被定义为0了,即 #define NULL 0,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号