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

链接地址:https://www.31ppt.com/p-6023353.html