《(中职)C语言程序设计案例教程第8章文件(5-8节)教学课件().ppt》由会员分享,可在线阅读,更多相关《(中职)C语言程序设计案例教程第8章文件(5-8节)教学课件().ppt(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、(中职)C语言程序设计案例教程第8章文件(5-8节)教学课件(工信版)目录/CONTENTS8.5文件的定位018.6文件操作的出错检测函数028.7文件操作应用8.8常见错误分析与解决0304本节要点:掌握文件定位函数的使用方法。掌握文件操作的出错检测函数掌握文件操作应用掌握编写简单的文件读写程序的方法018.5 文件的定位文件的定位在在C语言中,使用文件函语言中,使用文件函数数rewind()、fseek(fseek()和和ftellftell(),将文件位置指针定,将文件位置指针定位在所要读写的任意位位在所要读写的任意位置,这些函数皆包含在置,这些函数皆包含在头文件头文件“stdio.h
2、”中。中。在对文件进行操作前,需先在对文件进行操作前,需先知道当前文件位置指针的位知道当前文件位置指针的位置,将文件位置指针定位在置,将文件位置指针定位在相应位置后再进行操作。所相应位置后再进行操作。所谓文件位置指针,是系统设谓文件位置指针,是系统设置的用来指向文件当前读写置的用来指向文件当前读写位置的指针,会随着文件的位置的指针,会随着文件的读写操作而移动,不需用户读写操作而移动,不需用户定义。定义。8.5.1 rewind()函数rewind()函数调用的一般形式为:rewind(文件指针);04rewind()函数设置文件位置为给定流stream的文件的开头。03rewind()函数原型
3、为:void rewind(FILE*stream);02rewind()函数的功能是将文件位置指针移至文件起始处。01例如:rewind(fp);/设置文件位置指针为fp指向文件的开头。例:8-9:编写程序,将字符串中的数据写入文件“file5.txt”,再将文件“file5.txt”中的字符读入字符数组中,将字符数组输出到显示器。#includevoidmain()charstr=WeloveClanguage;FILE*fp;intch;intbuffer20;fp=fopen(file5.txt,w);fwrite(str,1,sizeof(str),fp);fclose(fp);/关
4、闭文件if(fp=fopen(file5.txt,r)=NULL)printf(打开文件失败!n);exit(0);while(1)ch=fgetc(fp);if(feof(fp)break;printf(%c,ch);rewind(fp);printf(n);fread(buffer,1,strlen(buffer),fp);printf(%sn,buffer);fclose(fp);8.5.2 fseek()函数fseek()函数调用的一般格式为:fseek(fp,位移量,起始点);fseek()函数原型为:intfseek(FILE*stream,longintoffset,intwhe
5、nce);fseek()函数设置流stream的文件位置为给定的偏移offset,参数offset意味着从给定的whence位置查找的字节数。0302019fseek()函数参数说明:“位移量”是指移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB时不会出错。当用常量表示位移量时,要求加后缀“L”。位移量为正,表示文件位置指针向文件尾方向移动;位移量为负,表示向文件头方向移动。“起始点”为位移量的参考点,有三种取值:“0”代表文件开始位置,“1”为当前位置,“2”为文件末尾位置。C标准制定的名字如表8-2所示。10fseek()函数参数说明:文件位置指针数字形式起始点名字0文
6、件开始位置SEEK_SET1文件当前位置SEEK_CUR2文件末尾位置SEEK_END例如:fseek(fp,50L,0);/以文件开头为基准,文件位置指针向文件尾方向移动fseek(fp,-50L,2);/以文件尾为基准,文件位置指针向文件头方向移动fseek()函数适用于二进制文件。在文本文件中因为需要进行字符转换,计算字节时容易发生混乱,不利于定位。例:8-10:编写程序,将两个字符串依次写入文件file6.txt中,并将文件中的内容输出到显示器。#include#include#includevoidmain()FILE*fp;charbuffer20;fp=fopen(file6.t
7、xt,w+);fputs(Welove,fp);fseek(fp,8,SEEK_SET);fputs(CLangauge.,fp);fclose(fp);if(fp=fopen(file6.txt,r+)=NULL)printf(打开文件失败!n);exit(0);rewind(fp);fread(buffer,1,strlen(buffer),fp);printf(%sn,buffer);fclose(fp);0302018.5.3 ftell()函数ftell()函数用于寻找位置指针的当前位置。ftell()函数原型为:longintftell(FILE*stream)ftell()函数返
8、回值为文件位置指针当前位置相对于文件开始的偏移字节数,如函数调用出错,则返回-1。ftell()函数调用的一般格式为:len=ftell(fp);例:例8-11:编写程序,将两个字符串依次写入文件file6.txt中,并将文件中的内容输出到显示器。#include#includevoidmain()FILE*fp;intlen;fp=fopen(file6.txt,r);/以只读方式打开文件file6.txtif(fp=NULL)printf(打开文件错误n);exit(0);fseek(fp,0,SEEK_END);/文件位置指针指向文件尾len=ftell(fp);/将指针的当前位置赋给变
9、量lenfclose(fp);printf(file6.txt的总大小=%d字节n,len);/输出文件的字节数040302018.5.4 feof()函数feof()函数用于判断文件位置指针是否在文件结束位置。feof()函数原型为:intfeof(FILE*fpoint);feof()函数调用的一般格式为:feof(文件指针);当文件位置指针在文件末尾时,返回值为1,否则返回值为0。例如:if(feof(fp)=1)printf(已经指向文件末尾n);elseprintf(没有指向文件末尾n);例:8-12:编写程序,将文件“file6.txt”复制到另一个文件“file7.txt”中,然
10、后读取“file7.txt”文件中的字符并输出。#include#includevoidmain()FILE*fp1,*fp2;charc;if(fp1=fopen(file6.txt,r)=NULL)printf(错误:文件打开失败!n);exit(0);if(fp2=fopen(file7.txt,w+)=NULL)printf(错误:文件打开失败!n);exit(0);while(!feof(fp1)c=fgetc(fp1);fputc(c,fp2);rewind(fp2);doc=fgetc(fp2);printf(%c,c);while(!feof(fp2);putchar(n);f
11、close(fp1);fclose(fp2);028.6 文件操作的出错检测函数17文件操作说明:文件操作的三个重要步骤为打开文件、打开文件判断和关闭文件,判断打开文件是否成功或者关闭文件是否成功,而且由于这类错误在程序编译及组建时并不报错,很容易被忽略。因此,在编写程序对文件操作时可先把这三个步骤写好,然后再添加其他操作程序段。例如:if(fp1=fopen(file.txt,r)=NULL)/*以只读方式打开文件file.txt*/printf(错误:文件打开失败!n);exit(0);C语言还提供函数ferror()和clearerr(),用以对文件读写操作过程中的出错情况进行检测。04
12、0302018.6.1 ferror()函数用于在调用输入、输出函数以后,检查调用的结果,如果ferror()的返回值为0,表示调用输入、输出函数成功,否则表示出错。ferror()函数原型为:intferror(FILE*stream)ferror()测试给定流stream的错误标识符,如果设置了与流关联的错误标识符,该函数返回一个非零值,否则返回一个零值。ferror()函数的一般格式:ferror(文件的指针);例如:ferror(fp);/fp为指向文件的指针变量040302018.6.2 clearerr()函数clearerr()函数用于清除文件错误标志并置文件结束标志为0。在调用
13、ferror()函数以后,如果出现调用输入、输出函数错误,将返回一个非0值作为错误标志,只有对同一文件调用。clearerr()函数原型为:voidclearerr(FILE*stream)clearerr()函数清除给定流stream的文件结束和错误标识符。clearerr()函数的一般格式:clearerr(文件指针);例如:clearerr(fp);/其中fp为指向文件的指针变量。例:8-13:编写程序,将文件“file6.txt”复制到另一个文件“file7.txt”中,然后读取“file7.txt”文件中的字符并输出。#includevoidmain()FILE*fp;charc;f
14、p=fopen(file6.txt,w);c=fgetc(fp);if(ferror(fp)printf(读取文件:file6.txt时发生错误!n);clearerr(fp);if(ferror(fp)printf(读取文件:file6.txt时发生错误!n);elseprintf(正常读取文件:file6.txt!n);fclose(fp);038.7 文件操作应用例8-14:编写程序,将学生姓名和成绩写入文件“学生成绩单.txt”,并将平均成绩写入文件。有5个学生,每个学生信息都包括两个部分,姓名和C语言成绩两项,需要用到结构体变量存放学生信息;具体数据如表所示。请计算出5个学生的平均成
15、绩,并将原有数据与平均成绩都存放在磁盘文件“学生成绩单.txt”中。姓名PeterLucyMaryTomJohnC语言成绩857883926823定义结构体类型:#include#include#defineN5typedefstruct/*定义结构体类型*/charname10;/*定义成员名字*/floatscore;/*定义成员分数*/student;24定义数据:voidmain()FILE*fp;/*定义文件描述符指针*/studentstuN=Peter,85,Lucy,78,Mary,83,Tom,92,John,68,;/*定义结构体变量并赋初值*/doublesum=0.0;
16、/*定义变量sum并赋初值*/doubleave;/*定义变量ave*/inti;/*定义循环变量*/25if(fp=fopen(学生成绩单.txt,w+)=NULL)/*判断文件是否打开成功*/printf(错误:文件打开失败!n);exit(0);for(i=0;iN;i+)/*循环条件*/fprintf(fp,姓名:%s成绩:%fn,stui.name,stui.score);/*输出名字和分数到文件*/sum=sum+stui.score;/*计算总分*/ave=sum/N;/*计算平均分*/fprintf(fp,平均成绩:%fn,ave);/*输出平均分到文件*/fclose(fp);/*关闭文件*/文件操作:048.8 常见错误分析与解决04030201(1)打开文件不存在。(2)打开方式有误。(3)文件操作步骤错误。(4)错用文件位置指针。常见错误通过本节学习重点理解和掌握的知识有:(1)掌握文件定位。(2)掌握fseek()函数设置流stream的文件位置。(3)掌握ftell()函数返回值文件位置指针当前位置。(4)掌握feof()函数判断文件位置指针是否在文件结束位置。(5)文件操作出错检测函数ferror()、clearerr()函数应用。本节小结