第11章文件.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第11章文件.ppt》由会员分享,可在线阅读,更多相关《第11章文件.ppt(30页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第第第第11111111章文件章文件章文件章文件 文件一般指存储在计算机外部介质上的一组数据的集合。11.1 文件的概念11.2 格式化数据文件操作11.3 字符数据文件操作11.4 fread()与fwrite()函数11.5 文件位置定位与错误处理函数11.6 应用实例大奖赛评分系统 11.1 文件文件的的概念概念文件:存储在外部介质上数据的集合文件:存储在外部介质上数据的集合,是操作系统数据管理的是操作系统数据管理的单位单位使用数据文件的目的使用数据文件的目的1、数据文件的改动不引起程序的改动、数据文件的改动不引起程序的改动程序与数据分离程序与数据分离2、不同程序可以访问同一数据文件中的
2、数据、不同程序可以访问同一数据文件中的数据数据共享数据共享3、能、能长期保存长期保存程序运行的中间数据或结果数据程序运行的中间数据或结果数据文件分类文件分类按文件的逻辑结构:按文件的逻辑结构:记录文件:由具有一定结构的记录组成(定长和不定长)记录文件:由具有一定结构的记录组成(定长和不定长)流式文件流式文件:由一个个字符(字节)数据顺序组成:由一个个字符(字节)数据顺序组成按存储介质:按存储介质:普通文件:存储介质文件(磁盘、磁带等)普通文件:存储介质文件(磁盘、磁带等)设备文件设备文件:非存储介质(键盘、显示器、打印机等):非存储介质(键盘、显示器、打印机等)按数据的组织形式:按数据的组织形
3、式:文本文件文本文件:ASCII文件,每个字节存放一个字符的文件,每个字节存放一个字符的ASCII码码二进制文件二进制文件:数据按其在内存中的存储形式原样存放:数据按其在内存中的存储形式原样存放11.1.2 C语言对文件的处理方法C语言对文件的处理一般有两种方法:缓冲文件系统在缓冲文件系统中,系统对文件进行读写之前首先在内存区开辟一个称作缓冲区的专用内存区域。从内存向磁盘写文件时必须先写入缓冲区,装满缓冲区后才一起写到磁盘上去;从磁盘读文件时必须先把一批数据读到缓冲区(充满缓冲区),然后再从缓冲区将数据逐个送到用户数据区。非缓冲文件系统在非缓冲文件系统中,文件的处理不自动开辟确定大小的缓冲区,
4、而是由程序设定缓冲区。一般用缓冲文件系统进行的输入/输出称为高级磁盘输入/输出。用非缓冲文件系统进行的输入/输出称为低级(低层)输入/输出。11.1.3 文件的访问方式(1)文件操作过程。文件操作需要包括以下几个过程:1)文件指针定义。2)文件打开。3)文件处理,执行以下两种操作中的一种:读文件和写文件。4)文件关闭。(2)文件指针定义。C语言规定对文件的所有操作都必须用文件指针建立与打开文件的联系,之后才能进行读写操作。文件指针定义格式为:FILE z指针变量例如,FILEfp;11.2 格式化数据文件操作格式化数据文件操作&C文件操作用文件操作用库函数库函数实现实现,包含在包含在stdio
5、.h&文件使用方式文件使用方式:打开文件打开文件-文件读文件读/写写-关闭文件关闭文件&系统系统自动自动打开和关闭三个打开和关闭三个标准文件标准文件:标准输入标准输入-键盘键盘 stdin标准输出标准输出-显示器显示器 stdout标准出错输出标准出错输出-显示器显示器 stderr打开文件打开文件fopen函数原型:函数原型:FILE *fopen(char *name,char*mode)功能:按指定方式打开文件功能:按指定方式打开文件返值:正常打开,为指向文件结构体的指针;打开失败,为返值:正常打开,为指向文件结构体的指针;打开失败,为NULL要打开的文件名要打开的文件名使用文件方式使用
6、文件方式例例 文件打开与测试文件打开与测试 FILE *fp;fp=fopen(aa.c,w);if(fp=NULL)printf(File open error!n);exit(0);例例 FILE *fp;fp=fopen(“c:zhoutest.dat”,”r”);例例 FILE *fp;char *filename=c:zhoutest.dat fp=fopen(filename,r);“r+/rb+”(读写读写)“a/ab”(追加追加)“w/wb”(只写只写)“r/rb”(只读只读)“w+/wb+”(读写读写)“a+/ab+”(读写读写)为为输入输入打开一个文本打开一个文本/二进制文
7、件二进制文件为为输出输出打开或建立一个文本打开或建立一个文本/二进制文件二进制文件为读为读/写打开一个文本写打开一个文本/二进制文件二进制文件为读为读/写建立一个文本写建立一个文本/二进制文件二进制文件为读为读/写打开或建立一个文本写打开或建立一个文本/二进制文件二进制文件向文本向文本/二进制文件尾二进制文件尾追加追加数据数据文件使用方式文件使用方式含义含义函数名称函数名称功能说明功能说明fopen()打开一个文件fclose()关闭一个文件fputc()输出一个字符到文件fgetc()从文件中读取一个字符fprintf()输出数据到文件fscanf()从文件中读取数据feof()判断文件的结
8、束标志ferror()判断文件操作是否正常fseek()设置读取位置rewind()将文件的读取位置移至文件开头remove()删除文件11.2.1 打开文件函数fopen()函数格式:FILEfopen(charfilename,charopstyle);函数功能:返回一个指向指定文件(描述块)的指针。函数说明:(1)filename是指要打开(或创建)的文件名。如果使用字符数组(或字符指针),则不使用双引号。如果直接使用文件名,必须加双引号。文件名前可以带路径,但一定要注意路径中的反斜杠“”要用两个代替,因为“”在字符串中作转义符号。(2)opstyle参数指明文件操作类型,文件使用方式由
9、rwatb+这6个字符拼成,各字符的含义是:(3)如果不能实现打开指定文件的操作,则fopen()函数返回一个空指针NULL(其值在头文件stdio.h中被定义为0)。(4)“rb+”与“ab+”的区别:使用前者打开文件时,读写位置指针指向文件头;使用后者时,读写指针指向文件尾。(5)在C语言中,把文本保存到ASCII文件中时,系统自动将回车换行符转换成一个换行符;在从ASCII文件中读写数据时,将换行符自动转换成回车和换行两个字符。使用二进制文件时,内存中的数据形式与数据文件中的形式完全一样,就不用再进行转化。(6)用“r+”,“w+”或“a+”打开的文件可以用来输入和输出数据。使用“r+”
10、方式时,该文件应该已经存在,以便能向计算机中输入数据。用“w+”方式则新建立一个文件夹,先向此文件中写数据,然后可以从中读写数据。用“a+”方式打开的文件,原来的文件不被删除,读写位置指针移动到文件尾,可以添加数据也可以读出数据。(7)在程序开始运行时,系统自动打开3个标准文件,并分别定义了文件指针:1)标准的输入文件stdin:指从终端输入(一般为键盘)。如果程序中指定要从stdin所指的文件输入数据,就是从终端键盘上输入数据。2)标准的输出文件stdout:指向终端输出(一般为显示器)。3)标准的错误文件stderr:指向终端标准错误输出(一般为显示器)。注意,在实际应用中,常用下面的方法
11、打开一个文件:char filename=d:tcdatacj.dat;if(fp=fopen(filename,opstyle)=NULL)printf(n不能打开文件.n);exit(1);11.2.2 关闭文件函数fclose()函数格式:int fclose(FILE*fp);函数功能:关闭fp所指向的文件,释放其缓冲区。如果正常关闭文件,则函数返回值为0;否则,返回值为非0。例如:关闭文件指针fp所指向的文件函数如下:fclose(fp);函数说明:(1)每次只能关闭一个文件,若需要关闭多个文件,要书写多个命令函数。(2)一旦关闭了与fp有联系的文件后,fp可以在此用于建立与其他文件
12、的联系。11.2.3 从文件中格式化输入数据fscanf()函数格式:int fscanf(FILE*fp,char format,var_addr_list);其中:fp:文件指针。format:格式输入控制字符串,与scanf()中的格式控制一致。van_addr_list:输入变量地址列表。函数功能:从指定文件中按定义格式化读取数据,赋值给指定变量。函数说明:(1)函数fscanf()的功能与以前介绍的标准输入函数scanf()基本相同,不同点是scanf()从标准输入设备即键盘上输入数据,而此函数是从某文件格式化输入数据,当然也可以是键盘,因为对操作系统来说,键盘也是一个文件。(2)函
13、数中格式控制必须与文件中数据存储格式完全一致,即对应数据项的个数与类型完全一致。11.2.4 向文件中格式化输出函数fprintf()函数格式:int fprintf(FILE*fp,char format,varlist);其中:fp:文件指针。format:格式输出控制字符串,与printf()中的格式定义一致。varlist:输出变量地址列表。函数功能:向指定文件中按定义格式写数据。函数说明:(1)此函数功能与前面介绍的标准输出函数printf()基本相同,不同点是printf输出到标准输出设备即显示器上,而此函数是向某文件中格式化输出数据。当然使用此函数也可以向显示器上输出信息。(2)
14、printf()函数与fscanf()函数是一对匹配的函数,fscanf()函数读取数据的格式必须与fprintf()函数定义的输出格式完全一致。11.2.5 文件建立【例11.1】键盘输入5位同学的3门课成绩,保存在数据文件cj.dat中。算法分析:这是一个文件创建的例子,在程序执行之前,文件cj.dat不存在。文件采用格式化输出方式,以ASCII码形式存储。#includestdio.hmain()FILE*fp;/*定义文件指针*/float sc1,sc2,sc3;int i;if(fp=fopen(cj.dat,w)=NULL)printf(nCan not open file cj
15、.dat.n);exit(1);for(i=0;i5;i+)printf(please input No.%d there scores:,i+1);scanf(%d,%d,%d,&sc1,&sc2,&sc3);fprintf(fp,%d,%d,%dn,sc1,sc2,sc3);fclose(fp);程序说明:(1)文件按写方式打开。文件打开采用了容错技术,即当程序打开失败时,fopen()函数返回值为NULL,给出错误提示,并终止程序。(2)通过格式输入从键盘获取学生成绩,每次输入一个人的3门课成绩,称为一条记录。(3)采用文件格式化输出函数写文件,一条记录占一行,由3个逗号分隔的数据组成。
16、(4)文件操作遵循定义、打开、数据准备(非文件操作)、写、关闭等过程。11.2.6 文件访问【例11.2】显示【例11.1】所产生的数据文件cj.dat的内容,并计算各门课程的平均分。算法分析:算法分析:这是一个典型的文件读操作,采用格式化输入函数读取文件,按行(记录)读取,显示记录内容,同时累加各门课程成绩。#includemain()FILE*fp;/*定义文件指针*/float sc1,sc2,sc3,sum1=0,sum2=0,sum3=0;int i;if(fp=fopen(cj.dat,r)=NULL)printf(nCan not open file cj.dat.n);exit
17、(1);for(i=0;i5;i+)fscanf(fp,%d,%d,%d,&sc1,&sc2,&sc3);sum1=sum1+sc1;sum2=sum2+sc2;sum3=sum3+sc3;printf(The scores are:%d,%d,%d,sc1,sc2,sc3);fclose(fp);printf(The scores average are:%d,%d,%dn,sum1/5,sum2/5,sum3/5);程序说明:程序说明:(1)文件按读方式打开。文件打开采用了容错技术,即文件打开失败,fopen()函数返回值为NULL,给出错误提示,并终止程序.(2)通过格式输入从文件中读取
18、学生成绩,每次读入一个人的3门课成绩一条记录,数据读格式控制与文件创建时数据写格式完全一致。(3)读取记录时,将不同课程成绩分别累加到不同累加和变量中,留作计算平均分时使用。(4)文件操作遵循定义、打开、读、数据处理(非文件操作)、关闭等过程。11.2.7 文件修改若存在一个文件,需要对文件中的数据进行修改、更新或追加等,此时不仅涉及文件的读操作,还涉及文件的写操作。追加是使用文件操作类型“a”。【例11.3】追加一条记录到【例10.1】建立的数据文件cj.dat中。#include stdio.h main()FILE*fp;float sc1,sc2,sc3;if(fp=fopen(cj.
19、dat,a)=NULL)printf(nCan not open file cj.dat.n);exit(1);printf(Please input third students three scores:);scanf(%d,%d,%d ,&sc1,&sc2,&sc3);fprintf(fp,%d,%d,%dn,sc1,sc2,sc3);fclose(fp);【例11.4】在【例11.1】中建立的数据文件中第三个同学的成绩后面插入一条记录。算法分析:算法分析:文件的修改或插入新记录一般引入第二个文件,直接覆盖写操作,要么全部覆盖原有的数据(打开方式w+),要么覆盖部分内容,导致数据不完整(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 11 文件
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内