C语言程序设计 教学课件 ppt 作者 邵军 全书 第10章

上传人:E**** 文档编号:89372367 上传时间:2019-05-24 格式:PPT 页数:70 大小:844KB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者 邵军 全书 第10章_第1页
第1页 / 共70页
C语言程序设计 教学课件 ppt 作者 邵军 全书 第10章_第2页
第2页 / 共70页
C语言程序设计 教学课件 ppt 作者 邵军 全书 第10章_第3页
第3页 / 共70页
C语言程序设计 教学课件 ppt 作者 邵军 全书 第10章_第4页
第4页 / 共70页
C语言程序设计 教学课件 ppt 作者 邵军 全书 第10章_第5页
第5页 / 共70页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 邵军 全书 第10章》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 邵军 全书 第10章(70页珍藏版)》请在金锄头文库上搜索。

1、第10章 文 件,10.1 文件概述 10.2 文件处理 10.3 文件的顺序读写 10.4 文件的随机读写 10.5 文件检测函数 本章小结,10.1 文 件 概 述 在以往的程序中,往往是从键盘输入数据,并将输出显示在计算机屏幕上。程序运行完毕后,所有数据都会消失。这样显然不满足一些实际需求。比如,在学生学籍管理系统中,需要将学生的相关信息以文件形式保存下来。本章介绍的C语言中文件的相关知识正是为了解决此类问题。,所谓“文件”,是指存放在外部介质中的一组相关数据的有序集合。这个数据集合有一个名字,称为文件名。操作系统是以文件为单位对数据进行管理的。也就是说,如果想找存放在外部介质中的数据,

2、就必须先按文件名找到所指定的文件,然后再从该文件中读取数据。若要在外部介质中存储数据,也必须先建立一个文件(以文件名为标识),然后才能向它输出数据。实际上,前面各章中已经多次使用了文件,例如源程序文件、目标文件、可执行文件、库文件(头文件)等。,在C语言中,文件是一串连续的字节,每个字节均能被单独读取。C语言程序对文件的处理是通过标准函数库中的文件操作函数实现的,使用这些函数,可以简单、高效、安全地访问外部数据。此外,C语言中所有的外部设备均被作为文件对待,这种文件称为设备文件。对外部设备的输入/输出处理就是读/写设备文件的过程。设备文件是指与主机相连的各种外部设备,如显示器、打印机、键盘等。

3、在操作系统中,将外部设备作为一个文件来进行管理,它们的输入、输出等同于对磁盘文件的读和写。通常把显示器定义为标准输出文件。一般情况下,在屏幕上显示有关信息就是向标准输出文件输出数据,如前面经常使用的printf、putchar函数就属于这类输出。键盘通常被指定为标准输入文件。从键盘上输入就意味着从标准输入文件上输入数据,如scanf、getchar函数就属于这类输入。,10.1.1 文本文件与二进制文件 从文件编码的方式来看,文件可分为ASCII文件和二进制文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。 例如,数5678的存储

4、形式为 ASCII码:00110101 00110110 00110111 00111000 十进制码: 5 6 7 8 共占用4个字节。,ASCII文件可在屏幕上按字符显示。例如,源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。由于ASCII文件是按字符显示的,因此能读懂文件内容。 二进制文件是按二进制的编码方式来存放文件的。例如,数5678的存储形式为 00010110 00101110 只占两个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。,10.1.2文件缓冲区 文件缓冲区可以分为输出文

5、件缓冲区和输入文件缓冲区。 在程序运行过程中,程序要将保存在内存中的数据写入磁盘,首先要建立一个“输出文件缓冲区”,这个缓冲区是连接计算机内存数据与外存文件的桥梁。当向文件输出数据时,准备输出的数据先送入文件缓冲区,等文件缓冲区数据装满后再一起送到文件中。这一过程称为“写文件”,是数据输出过程。,与“写文件”过程相对的是要将保存在文件中的数据读入内存。首先要建立一个“输入文件缓冲区”,当从文件中输入数据时,也是把准备输入的数据先送入文件缓冲区,等文件缓冲区数据装满之后再整个送到程序数据区。这一过程称为“读文件”,是数据输入过程。 图10-1所示为使用缓冲区的文件读写示意图,这种数据的读写方式提

6、高了程序的执行效率。,图10-1 使用缓冲区的文件读、写示意图,10.1.3 文件的指针 在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针可对它所指的文件进行各种操作。为了能正常使用文件,C语言系统要对打开的每一个文件从多方面进行跟踪管理,如文件缓冲区的大小、文件缓冲区的位置、文件缓冲区使用的程度、文件操作模式、文件内部读写位置等,这些信息被记录在“文件信息区”的结构体变量中,该变量的数据类型由C语言系统事先定义,固定包含在头文件“stdio.h”中,数据类型名为“FILE”。以下是Turbo C 2.0文件指针类型的定义:,typedef struct int lev

7、el; /*缓冲区被占用的程度*/ unsigned flags; /*文件状态标记*/ char fd; /*文件描述符*/ unsigned char hold; /*如无缓冲区,则不读取字符*/ short bsize; /*缓冲区大小*/ unsignedchar *buffer; /*文件缓冲区指针*/ unsignedchar *curp; /*文件定位指针*/ unsigned istemp; /*临时文件标识*/ short token; /*用于合法性检测*/ FILE;,这里,FILE就是所定义的文件指针类型的类型名。在定义中使用了“typedef”关键字,它的作用是把用s

8、truct定义的结构体类型命名为“FILE”。 在C语言中,要对已打开的文件进行操作,就要通过指向该文件结构体的指针,因此需要在程序中定义FILE类型的指针变量,并使其指向要操作的文件。 定义文件指针的一般形式为 FILE *指针变量标识符; 例如: FILE *fp; 表示fp是指向FILE类型结构体的指针变量,通过fp即可找到存放某个文件信息的结构体变量,然后按结构体变量提供的信息找到该文件,实施对文件的操作。习惯上,把fp称为指向一个文件的指针。,10.2 文 件 处 理 10.2.1文件的打开 打开一个文件应使用fopen函数,其调用形式为 FILE *fp; fp=fopen(文件名

9、,使用文件方式); 例如: FILE *fp; fp=fopen(“a”,“r”); 其意义是在当前目录下打开文件a,只允许进行“读入”(r代表read,即读入)操作,fopen函数带回指向a文件的指针并赋给fp。 又如: FILE *fphzk; fphzk=fopen(“c:hzk16“,“rb“);,其意义是打开C驱动器磁盘的根目录下的文件hzk16,这是一个二进制文件,只允许按二进制方式进行读操作。两个反斜线“”中的第一个表示转义字符,第二个表示根目录。 由以上两个例子可以看出,在打开一个文件时,通知编译系统以下3个信息: 需要打开的文件名; 文件使用方式; 让哪一个指针变量指向被打开

10、的文件。 文件使用方式共有12种,如表10-1所示。,对于文件使用方式有以下几点说明: (1) 文件使用方式由r、w、a、t、b、+六个字符拼成,各字符的含义是: r(read):读; w(write):写; a(append):追加; t(text):文本文件,可省略不写; b(banary):二进制文件; +:读和写。 (2) 用 “r“ 方式打开一个文件时,该文件必须已经存在,且只能从该文件读出数据。,(3) 用 “w” 方式打开一个文件时,若打开的文件不存在,则以指定的文件名建立该文件;若打开的文件已经存在,则将该文件刷新。以该方式打开的文件只能写,不能读。 (4) 若要向一个已存在的

11、文件追加新的信息,只能用 “a” 方式打开文件,但此时该文件必须是存在的,否则将会出错。 (5) 在打开一个文件时,如果出错,fopen函数将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。因此常用以下程序段打开文件: if(fp=fopen(“c:hzk16”,“rb”)=NULL) printf(“nerror on open c:hzk16 file!”); getch( ); exit(1); ,这段程序的含义是,如果返回的指针为空,表示不能打开C盘根目录下的hzk16文件,则给出提示信息“error on open c: hzk16 fi

12、le!”。getch()的功能是从键盘输入一个字符,但不在屏幕上显示。在这里,该行的作用是等待,只有当用户从键盘敲任一键时,程序才继续执行,因此用户可利用这个等待时间阅读出错提示。敲键后执行exit(1)退出程序。,(6) 把一个文本文件读入内存时,要将ASCII码转换成二进制码,而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。二进制文件的读写不存在这种转换。 (7) 标准输入文件(键盘)、标准输出文件(显示器)、标准出错输出(出错信息)是由系统打开的,可直接使用。,10.2.2文件的关闭 文件一旦使用完毕,应用关闭文件函数把文件关闭,以

13、避免文件的数据丢失。 用fclose函数关闭文件,其调用形式为 fclose(文件指针); 例如: fclose(fp); 前面曾把用fopen函数打开文件时所带回的指针赋给了fp,现通过fp把该文件关闭,此后fp不再指向该文件。正常完成关闭文件操作后,fclose函数返回值为0。如返回非零值,则表示有错误发生。,10.3 文件的顺序读写 10.3.1字符读写函数fgetc和fputc 1. 读字符函数fgetc fgetc函数的调用形式为 字符变量=fgetc(文件指针); 例如: ch=fgetc(fp);,其中:fp为文件指针变量;ch为字符变量。该语句表示从打开的文件fp中读取一个字符

14、并送入ch中。在使用fgetc函数时,应注意以下几点: (1) 在fgetc函数调用中,读取的文件必须是以读或读写方式打开的。 (2) 读取字符的结果可以不向字符变量赋值,例如: fgetc(fp); 但是读出的字符不能保存。,(3) 在文件内部有一个位置指针,用来指向文件的当前读写字节。在文件打开时,该指针总是指向文件的第一个字节。使用fgetc函数后,该位置指针将向后移动一个字节。因此可连续多次使用fgetc函数读取多个字符。注意文件指针和文件内部的位置指针是不一样的。文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当

15、前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。,2. 写字符函数fputc fputc函数的功能是把一个字符写入指定的文件中,其调用形式为 fputc(字符量,文件指针); 其中,待写入的字符量可以是字符常量或变量。例如: fputc(a,fp); 其意义是把字符a写入fp所指向的文件中。,对于fputc函数的使用也要说明几点: (1) 被写入的文件可以用写读写追加方式打开。用写或读写方式打开一个已存在的文件时,将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件的内容,且希望写入的字符从文件末开始存放,则必须以追加方式打开文件。被写入的文件若不存在,则创建该文件。 (2) 每写入一个字符,文件内部的位置指针向后移动一个字节。 (3)fputc函数有一个返回值,如写入成功则返回写入的字符,否则返回一个EOF。可用此来判断写入是否成功。,【例10.1】 把从键盘输入的一个字符串写入磁盘文件example.txt中。 程序如下: #include “stdio.h” main( ) char ch; FILE *fp; fp=fopen(“example.txt”,“w”); printf(“Enter a string: ”); while(ch=ge

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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

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