C语言第12章文件课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C语言第12章文件课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 12 文件 课件
- 资源描述:
-
1、 在前面章节的阐述中,已多次涉及到微型计算机的输入输出操作,这些输入输出操作仅对常规输入输出设备进行:从键盘输入数据,或将数据从显示器或打印机输出。通过这些常规输入输出设备,有效地实现了微型计算机与用户的联系。然而,在实际应用系统中,仅仅使用这些常规外部设备是很不够的。使用微型计算机解决实际问题时往往需要处理大量的数据;并且希望这些数据不仅能被本程序使用,而且也能被其他程序使用。通常在计算机系统中,一个程序运行结束后,它所占用的内存空间将被全部释放,该程序涉及的各种数据所占有的内存空间也将被其他程序或数据占用而不能被保留。为保存这些数据,必须将它们以文件形式存储在外存储器(如磁盘、磁带)中;当
2、其他程序要使用这些数据,或该程序还要使用这些数据时,再以文件形式将数据从外存读入内存。尤其在用户处理的数据量较大,数据存储要求较高,处理功能需求较多的场合,应用程序总要使用文件操作功能。12.1.1 文件 从计算机操作系统的概念看,文件是指存放在外存储器上的信息的集合。在微型计算机系统中,使用的外存储器主要是磁盘。磁盘上的所有信息均以文件的形式存储,每个文件具有一个唯一的名称,通过名称对文件进行读、写、修改或删除等操作。文件的命名方法随计算机系统不同而有所差异,在DOS操作系统中文件名称由文件名和扩展名两部分组成,两部分之间用“.”号分隔,如:DATAl.C、TURBO.EXE、COMMAND
3、.COM等。规定文件名最多由8个字符组成,扩展名由3个字符组成。文件可以从不同的角度进行分类,例如,按照文件保存的内容区分,磁盘文件可以分为程序文件和数据文件。程序文件保存的是程序,数据文件用于保存数据。程序文件的读写操作一般由系统完成,数据文件的读写往往由应用程序实现。前面用到的计算机常规输入输出设备也完成类似的功能,因此,从广义的角度看,这些外部设备也都可以看作是一种设备文件,也可以给它们取一个唯一的文件名,对它们的操作也可用与磁盘文件相同的方法去完成。例如,在DOS操作系统中,将打印机定义成名为PRN的设备文件,当向该文件写入信息时,实际上就是打印输出;将键盘定义为名字是CON的设备文件
4、,当从该文件读出信息时,实际上就是从键盘接收键入的字符。这种将物理设备看作是一种逻辑文件,用与磁盘文件操作相同的命令进行操作的做法,可以简化程序设计,方便了用户。总之,从广义上说,文件是指信息输入和输出的对象,磁盘文件、键盘、显示器、打印机等均可视为文件。C语言中采用了类似的做法。C语言中提供了丰富的IO库函数,利用这些库函数完成对各种数据文件及设备文件的操作。12.1.2 常用的文件类型 1.文本文件 文本文件又称ASCII码文件(也称字符文件或正文文件),它是由一个个占用一个字节存储空间的ASCII字符组成的,每一个字符都被编成ASCII码存储,数据在内存中的表现形式与数据本身不一致,必须
5、由系统进行一定的转换。正因为每个ASCII码对应一个字符,文本文件的输出就与字符一一对应,便于对字符进行逐一处理,也便于输出字符。例如,整数11111占5个字节。文本文件由文本行组成,每行可含0到多个字符,并以换行符n结尾,整个文本的结束标志是0 x1a。在用文本向计算机输入时,将回车换行符(r和n)转换成一个换行符(n),在输入时把换行符转换成回车和换行两个字符。2.二进制文件 二进制文件中的数据与其在内存中二进制表示是一致的,一个字节不一定表示一个数据,其在内存中的存储值与数值本身是相同的。例如,2978这个整数,在文本文件中用其ASCII码表示为:2 9 7 8 505755561011
6、10100010它只需要占用2个字节。二进制文件也不做像文本文件那样的从回车换行符到换行符之间的转换。即将数字表示成对应的字符序列。这个整数有4位数字,共用了4个字符;一个字符占一个字节,故共用了4个字节。而在二进制文件中,该数表示成相应的二进制数字:Turbo C语言规定,在二进制存储形式中,整型数用2个字节表示,长整型用4个字节表示,实型数(浮点数)用4个字节表示,双精度数用8个字节表示。一般地说,二进制文件节省存储空间,并且由于在输入时不需要把字符代码先转换成二进制形式再送入内存,在输出时也不需要把数据由二进制形式转换为字符代码再输出,因而输入输出速度快。用户程序在实用中,从节省时间和空
7、间的要求考虑,一般选用二进制文件。但是如果用户准备的数据是作为文档使用阅读的,则一般使用字符文件,它们可以方便、快捷地通过显示器或打印机直接输出 C语言把所有的外设当作文件对待,这样的文件称为设备文件,并由系统给这些设备文件命名。例如,前面提过的打印机的设备文件名是PRN,向PRN输出数据,就是向打印机输出打印数据,C中常用的标准设备文件名如下:3.设备文件和流 CON:键盘(或KYBD)CON:显示器(或SCRN)PRN:打印机(或LPT1)AUX:异步通信口(或COM1)另外,系统还命名了三个标准设备文件的文件结构体指针,如下所示:stdin:标准输入文件结构体指针(由系统分配为键盘)st
8、dout:标准输出文件结构体指针(由系统分配为显示器)stderr:标准错误输出文件结构体指针(由系统分配为显示器)流(stream)是程序输入输出的一个连续的数据序列,它实际上是文件输入输出的一种状态形式。因此,一个C文件就是一个字节流或二进制流。在C语言中,所有的流均以文件形式出现,包括设备文件,这种文件又称为流式文件。12.1.3 C语言的输入输出操作 由于相对于内存储器而言,磁盘是慢速设备。在C语言的文件操作中,如果每向磁盘写入一个字节或读出一个字节的数据,都要启动磁盘操作,将会大大降低系统的效率,而且还会对磁盘驱动器的使用寿命带来不利影响。为此在文件系统中往往使用缓冲技术,即系统在内
9、存中为每一个正在读写的文件开辟一个“缓冲区”,利用缓冲区完成文件读写操作。当从磁盘文件读数据时,应用程序并不直接从磁盘文件读取数据,而是先由系统将一批数据从磁盘取入内存“输入缓冲区”中,然后再由应用程序的读操作从缓冲区依次将数据送给程序中的接收变量,供程序处理。其过程如图12.1a所示。磁盘文件内存程序数据区缓冲区磁盘文件(a)读磁盘文件内存程序数据区缓冲区(b)写磁盘文件图12.1 磁盘文件读写操作 在向磁盘文件写入数据时,先将程序中有关变量或表达式的值送到“输出缓冲区”中,待缓冲区装满后,才由系统将缓冲区的数据一次写入磁盘文件中,如图12.1b所示。这种利用缓冲区将对磁盘文件的频繁逐次访问
10、变为批量访问的做法称为标准文件操作,对应的磁盘文件系统称为缓冲文件系统,也称标准文件系统或高层文件系统。不使用缓冲区的磁盘文件系统成为非缓冲文件系统,也称非标准文件系统或低层文件系统。标准文件系统功能强,使用方便,由系统代替用户做了许多事情,提供了许多方便。非标准文件系统则直接依赖于操作系统,通过操作系统的功能直接对文件进行操作,因而被称为低层文件系统。用C语言编程时,若使用非标准文件系统,要求编程者熟悉操作系统,善于利用系统的功能,编程难度大一些,但程序的执行效率高,占用内存资源较少。新的ANSI标准推荐使用标准文件系统。C语言中,无论是使用标准文件系统还是非标准文件系统,都是利用IO库函数
11、完成文件操作的。12.1.4 文件存取方式 C语言中,文件被看作是字节序列,或称二进制流。即C语言的数据文件由顺序存放的一连串字节(字符)组成,没有记录的界限,因此,C语言的文件称作流式文件,文件存取操作的数据单位是字节,允许存取一个字节和任意多个字节,这样有效地增加了文件操作的灵活性。标准IO提供了4种文件存取方法:(1)读写一个字符。(2)读写一个字符串,将多个字符组成的字符串写入文件或从文件中读出。(3)格式化读写,根据格式控制指定的数据格式对数据进行转换存取。(4)成块读写,也称作按记录读写。C语言的文件虽然是按字节流存放,但可以按记录存取多个字节的数据。对应于以上4种文件存取方式,C
12、语言有相应的函数完成。4种存取方式和C语言的对应的函数关系如图12.2所示。文件的字节流将多个字节作为一个数据存取freadfwrite字符存取fgetcfputc字符串存取fgetsfputs例如 读取多个字节格式存取fscanffprintf例如,将两个字节的数据作为整数存取图12.2 四种文件存取方式与函数12.2.1 文件结构指针 在C语言程序中当建立或调用一个磁盘文件时,必须了解如下信息:与该文件对应的内存缓冲区的地址、文件当前的读写位置、文件操作的方式、是文本文件还是二进制文件、是读操作还是写操作等。标准文件系统为每一个文件开辟一个“文件信息区”,用于存放上述这些信息。“文件信息区
13、”在内存中,是一个由系统定义的结构体变量,该变量具有FILE的数据结构。FILE数据结构一般定义在stdio.h头文件中,定义如下:type structshor level;unsigned flags;char fd;unsigned char hild;short bsize;unsigned char *buffer;unsigned char *curp;unsigned istemp;short token;FILE;这是Turbo C中使用的定义,不同的C编译程序可能使用不同的定义,即结构中的字段名、字段个数、字段作用等都可能不同,但基本含义变化不会太大,因为它最终都要通过操作系
14、统去控制这些文件。读者对这些内容不必深究。每当程序打开一个文件(若该文件不存在,则表示要建立文件;若文件已存在,则打开就意味着要对该文件进行读写),系统就在内存建立一个与该文件对应的FILE结构体变量。有几个文件就建立几个这样的结构体变量,分别存放各文件的有关信息。同时返回对应FILE结构指针(地址)。这样,对该文件的操作,都以该指针为参考,用户无需对这个结构的内容进行控制。程序中不用变量名来标识结构体变量,而是设置一个指向该结构体变量的指针变量,通过它来访问结构体变量,例如:FILE *fp;便定义了一个FILE结构体变量。当程序打开一个文件,就得到对应FILE结构指针。只要把该指针赋给指针
15、变量fp,fp就指向了这个FILE结构体变量,也就是指向这个文件了。需要注意的是,不要把文件指针与FILE结构指针混为一谈,它们代表两个不同的地址。文件指针指出了对一个文件当前要读写的数据位置。而FILE结构指针指出已打开的文件所对应的FILE结构在内存的地址,实际上它本身也包含了文件指针的信息。12.2.2 文件的打开 对磁盘文件的操作包括打开文件、读文件、写文件、关闭文件或删除文件等操作。任何一个文件操作,都必须先打开,后读或写;读写完成后,最后都应关闭文件。所谓打开文件,是在程序和系统之间建立起联系,程序把所要操作的文件的有关信息,如文件名、文件操作方式(读、写或读写)等通知给系统。从实
16、质上看,打开文件表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,此后用户程序就可用此FILE指针来实现对指定文件的存取操作。C语言程序标准文件的打开操作用fopen()函数实现,其调用格式为:FILE*fopen(char*filename,char*mode);fopen()打开一个filename指向的文件,文件操作方式由mode的值决定。例如,fopen(“datafile.dat”,“r”);表示打开名为datafile.dat的文件,文件操作方式设定为“只读”方式(即只能从文件读取数据,不能向文件写入数据)。一般文件名需要用双引号括起来,文件名中也
17、可以包含用双反斜线隔开的路径名。文件操作方式规定如表12.1所示。表表12.1 C语言文件操作方式语言文件操作方式 文件操作方式 含 义 r(只读)为只读打开一个字符文件 w(只写)为只写打开一个字符文件,文件指针指向文件首部 a(追加)打开字符文件,指向文件尾在已存在的文件中追加数据 rb(只读)为只读打开一个二进制文件 wb(只写)为只写打开一个二进制文件 续表 ab(追加)打开二进制文件,以向文件追加数据 r+(读写)以读写方式打开一个已存在的字符文件 w+(读写)为读写建立一个新的字符文件 a+(读写)为读写打开一个字符文件,进行追加 rb+(读写)为读写打开一个二进制文件 wb+(读
18、写)为读写建立一个新的二进制文件 ab+(读写)为读写打开一个二进制文件进行追加 说明:(1)用r方式打开的文件只能在该文件已经存在的条件下向计算机输入数据。(2)用w方式打开的文件只能向该文件写数据,并且在该文件不存在的情况下,则建立以指定名字命名的文件,如果已经存在该文件,则在打开时删去该文件,然后重新建立一个新文件。(3)用a方式向文件尾追加新的数据,要求文件必须首先存在。(4)用r+、w+、a+方式打开的文件即可以用来输入数据,也可以用来输出数据。其它原理与前述三点相同。(5)当用fopen()函数成功地打开一个文件时,该函数将返回一个FILE指针;如果文件打开操作失败,则函数返回值是
19、一个NULL空指针。fopen()函数的返回值应当立即赋给一个PIlE结构指针变量,以便以后能通过该指针变量来访问这个文件,否则此函数的返回值就会丢失而导致程序无法对此文件进行操作。例如,若想打开filel文件进行写操作,可用下面的方法:FILE *fpIf(fp=fopen(”filel”,”w)=NULL)printf(”file cannot be opened n”);exit(1);elseprintf(”file opened for writing n”);12.2.3 关闭文件 程序对文件的读写操作完成后,必须关闭文件。这是因为对打开的磁盘文件进行写入时,若文件缓冲区的空间未被
20、写入的内容填满,这些内容将不会自动写入打开的文件中,从而导致内容丢失。只有对打开的文件进行关闭操作时,停留在文件缓冲区的内容才能写到磁盘文件上去,从而保证了文件的完整性。关闭标准文件用fclose()函数,函数说明如下:int fclose(FILE*stream);例如,fclose(fpl);它表示该函数将关闭FILE结构指针变量fpl对应的文件,并返回一个整数值。若成功地关闭了文件,则返回一个0值;否则返回一个非零值。12.2.4 文件的读写1.文件的字符读函数fgetc()这类函数每执行一次,只能读写文件中的一个字符。从磁盘文件读取字符的函数是fgetc(),其形式为:int fget
展开阅读全文