书签 分享 收藏 举报 版权申诉 / 42
上传文档赚钱

类型c语言学习c语言课件-第12章.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:3471051
  • 上传时间:2022-09-03
  • 格式:PPT
  • 页数:42
  • 大小:156.01KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《c语言学习c语言课件-第12章.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    语言 学习 课件 12
    资源描述:

    1、第第1212章章 文文 件件本章学习目标本章学习目标q了解文件的概念。了解文件的概念。q熟练掌握文件类型指针的使用。熟练掌握文件类型指针的使用。q掌握文件的基本操作。掌握文件的基本操作。Return在程序运行时,程序本身和数据一般都存放在内存中。当程序运行结束后,存放在内存中的数据被释放。如果需要长期保存程序运行所需的原始数据,或程序运行产生的结果,就必须以文件形式存储到外部存储介质上。12.1 语言文件概述12.2 文件的打开与关闭12.3 文件的读写12.4 文件定位12.5 文件的出错检测12.1 语言文件概述语言文件概述 1 1文件与文件名文件与文件名 文件是指存放在外部存储介质上的数

    2、据集合。为标识一个文件,每个文件都必须有一个文件名,其一般结构为:主文件名主文件名.扩展名扩展名 文件命名规则,遵循操作系统的约定。2 2文件分类文件分类可以从不同的角度对文件进行分类:(1)根据文件的内容,可分为程序文件和数据文件,程序文件又可分为源文件、目标文件和可执行文件。(2)根据文件的组织形式,可分为顺序存取文件和随机存取文件。12.1.1 文件的概念及分类文件的概念及分类(3)根据文件的存储形式,可分为ASCII码文件和二进制文件。ASCII码文件的每1个字节存储1个字符,因而便于对字符进行逐个处理。但一般占用存储空间较多,而且要花费转换时间(二进制与ASCII码之间的转换)。二进

    3、制文件是把内存中的数据,原样输出到磁盘文件中。可以节省存储空间和转换时间,但1个字节并不对应1个字符,不能直接输出字符形式。12.1.2 文件的操作流程文件的操作流程 通过程序对文件进行操作,达到从文件中读数据或向文件中写数据的目的,涉及到的操作有:建立文件、打开文件、从文件中读数或向文件中写数、关闭文件等。一般遵循的步骤为:(1)建立/打开文件(2)从文件读取数据或向文件写数据。(3)关闭文件 打开文件是进行文件读写操作之前的必要步骤。打开文件就是将指定的文件与程序联系起来,为下面进行的文件读写做好准备。当为进行写操作而打开一个文件时,如果这个文件不存在,则系统会建立这个文件,并打开它。当为

    4、进行读操作而打开一个文件时,文件应该是已经存在的,否则会出错。所谓读文件是指,将磁盘文件中的数据传送到计算机内存的操作。所谓写文件是指,从计算机内存向磁盘文件中传送数据的操作。关闭文件就是取消程序与指定的数据文件之间的联系,表示文件操作的结束。所谓缓冲文件系统是指,系统自动地在内存区为每个正在使用的文件开辟一个缓冲区。从内存向磁盘输出数据时,必须首先输出到缓冲区中。待缓冲区装满后,再一起输出到磁盘文件中。从磁盘文件向内存读入数据时,则正好相反:首先将一批数据读入到缓冲区中,再从缓冲区中将数据逐个送到程序数据区。12.1.3 12.1.3 缓冲文件系统与非缓冲文件系统缓冲文件系统与非缓冲文件系统

    5、 1.1.缓冲文件系统缓冲文件系统 所谓所谓“非缓冲文件系统非缓冲文件系统”是指系统不自动开辟是指系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲确定大小的缓冲区,而由程序为每个文件设定缓冲区。非缓冲文件系统依赖于操作系统,通过操作系区。非缓冲文件系统依赖于操作系统,通过操作系统的功能对文件进行读写,是系统级的输入输出,统的功能对文件进行读写,是系统级的输入输出,它不设文件结构体指针,只能读写二进制文件,但它不设文件结构体指针,只能读写二进制文件,但效率高、速度快。效率高、速度快。在过去使用的在过去使用的C C版本(如版本(如UNIXUNIX系统下使用的系统下使用的C C)支持上述两

    6、种对文件处理的方法,但是支持上述两种对文件处理的方法,但是 ANSI C 标准不再包括非缓冲文件系统标准不再包括非缓冲文件系统,因此建议大家最好,因此建议大家最好不要选择它。不要选择它。2.2.非缓冲文件系统非缓冲文件系统 12.1.4 12.1.4 文件指针文件指针 ANSI C为每个被使用的文件在内存开辟一块用于存放上述信息的小区,利用一个结构体类型的变量存放。该变量的结构体类型由系统取名为FILE,在头文件stdio.h中定义如下:typedef structshort level;/*缓冲区“满”或“空”的程度*/unsigned flages;/*文件状态标志*/char fd;/*

    7、文件描述符*/unsigned char hold;/*如无缓冲区不读取字符*/short bsize;/*缓冲区的大小*/unsigned char*baffer;/*缓冲区的读写位置*/unsigned char*curp;/*文件读写位置*/unsigned istemp;/*临时文件,指示器*/short token;/*用于有效性的检查*/FILE;在操作文件以前,应先定义文件类型的指针,定义的一般格式:FILE FILE *指针变量标识符指针变量标识符例如:FILE*fp1,*fp2;按照上面的定义,fp1和fp2均为指向结构体类型的指针变量,分别指向一个可操作的文件,换句话说,一

    8、个文件有一个文件类型指针,今后对文件的访问,会转化为针对文件类型指针的操作。12.2 12.2 文件的打开与关闭文件的打开与关闭12.2.1 12.2.1 文件的打开文件的打开fopenfopen()()函数函数 1用法:FILE FILE *fopenfopen(“(“文件名文件名”,“操作方式操作方式”););2功能:返回一个指向指定文件的指针。3函数原型:stdio.h。注注:对文件操作的库函数,函数原型均在头文件stdio.h中。后续函数不再赘述。对文件进行操作之前,必须先打开该文件;使用结束后,应立即关闭,以免数据丢失。语言规定了标准输入输出函数库,用fopen()函数打开一个文件,

    9、用fclose()函数关闭一个文件。(1)“文件名”是指要打开(或创建)的文件名。如果使用字符数组(或字符指针),则不使用双引号。(2)“操作方式”如表12-2所示。例如,FILE *fp;fpfopen(data.99,r);3说明(1)如果不能实现打开指定文件的操作,则fopen()函数返回一个空指针NULL(其值在头文件stdio.h中被定义为)。为增强程序的可靠性,常用下面的方法打开一个文件:if(fp=fopenif(fp=fopen(文件名文件名,操作方式操作方式)=)=NULL)NULL)printf printf(can not open this filen);(can no

    10、t open this filen);exit(0);exit(0);关于exit()函数1)用法:void exit(void exit(程序状态值程序状态值););2)功能:关闭已打开的所有文件,结束程序运行,返回操作系统,并将“程序状态值”返回给操作系统。当“程序状态值”为时,表示程序正常退出;非值时,表示程序出错退出。(2)“r(b)+”与“a(b)+”的区别:使用前者打开文件时,读写位置指针指向文件头;使用后者时,读写指针指向文件尾。(3)使用文本文件向计算机系统输入数据时,系统自动将回车换行符转换成一个换行符;在输出时,将换行符转换成回车和换行两个字符。使用二进制文件时,内存中的数

    11、据形式与数据文件中的形式完全一样,就不再进行转换。(4)有些编译系统,可能并不完全提供上述对文件的操作方式,或采用的表示符号不同,请注意所使用系统的规定。(5)在程序开始运行时,系统自动打开三个标准文件,并分别定义了文件指针:1)标准输入文件stdin:指向终端输入(一般为键盘)。如果程序中指定要从stdin所指的文件输入数据,就是从终端键盘上输入数据。2)标准输出文件stdout:指向终端输出(一般为显示器)。3)标准错误文件stderr:指向终端标准错误输出(一般为显示器)。12.2.2 12.2.2 文件的关闭文件的关闭fclosefclose()()函数函数1用法:int fclose

    12、int fclose(FILE (FILE *文件指针文件指针););2功能:关闭“文件指针”所指向的文件。如果正常关闭了文件,则函数返回值为;否则,返回值为非。例如,fclose(fp);/*关闭fp所指向的文件*/12.3 12.3 文件的读写文件的读写文件打开之后,就可以对它进行读与写的操作了。下面按文件的性质分类进行操作。针对文本文件和二进制文件的不同性质,对文本文件来说,可按字符读写或按字符串读写;对二进制文件来说,可进行成块的读写或格式化的读写。12.3.1 12.3.1 读写一个字符读写一个字符 C提供fgetc和fputc函数对文本文件进行字符的读写。1.1.读字符函数读字符函

    13、数fgetcfgetc fgetc()函数的原型存于stdio.h头文件中,格式为:int fgetc(FILE int fgetc(FILE*fpfp););功能:从指定的文件中读一个字符,并将文件的位置指针移到下一个字符处,如果已到文件尾,函数返回EOF。fgetc()函数调用形式为:字符变量字符变量fgetcfgetc(文件指针文件指针);例如:ch=fgetc(fp);/*从fp指向的文件中读取一个字符送入ch变量中*/2.2.写字符函数写字符函数fputcfputc fputc()函数的原型为:int fputc(int ch,FILE int fputc(int ch,FILE*f

    14、pfp)功能:将字符ch的值写入所指定文件的当前位置处,并将文件指针后移一位。fputc()函数的返回值是所写入字符的值,出错时返回EOF。函数的调用形式:fputcfputc(字符,文件指针字符,文件指针);例如:/*将字符常量a写入fp所指向的文件中*/【例【例12-112-1】将存放于磁盘的指定文本文件按读写字符方式逐个地从文件读出,然后再将其显示到屏幕上。(采用带参数的main(),指定的磁盘文件名由命令行方式通过键盘给定。)/*exam12_1*/#include stdio.h#include stdlib.hint main(int argc,char*argv)char ch;

    15、FILE*fp;int i;(续)(续)if(argctype test.txt I love china!(显示内容)说明从键盘写入的字符已存入文件test.txt中。注意:应转入当前路径后使用type命令,这里假设当前路径是c:tc。可以执行“file”菜单的“OS Shell”菜单项暂时转入DOS命令行方式。2.3.2 2.3.2 读写一个字符串读写一个字符串 C语言提供fgets()和fputs()函数来实现对文件以字符为单位进行读写,由于这两个函数在使用中往往是一次读写一行,所以也称行读写函数。1.1.读字符串函数读字符串函数fgets C提供读字符串的函数原型在stdio.h头文件

    16、中,其函数形式为:fgets()函数的调用形式为:功能:从文件指针所指向的文件中读取至多n-1个字符,在读入的最后一个字符后加上串结束标志0,并把它们放入字符数组中。读取过程中如果遇到了换行符或EOF(文件结束符),则读取结束。【例【例12-312-3】从test.txt文件中读入一个含10个字符的字符串。/*exam12_3exam12_3*/#include stdio.h#include stdlib.hint main(void)FILE*fp;/*定义文件指针*/char str11;if(fp=fopen(test.txt,r)=NULL)/*以只读方式打开文件*/printf(c

    17、annot open file!n);exit(0);fgets(str,11,fp);printf(“n%sn”,str);/*将字符串输出到屏幕*/fclose(fp);return 0;演示注意:编译时使用“change dir”命令修改工作目录为test.txt所在目录。2.2.写字符串函数写字符串函数fputsfputs C提供写字符串的函数原型在stdio.h头文件中,其函数形式为:int fputs(char int fputs(char*str,FILE str,FILE*fpfp)其调用的一般形式为:fputsfputs(字符串,文件指针字符串,文件指针);功能:将字符串写入

    18、文件指针所指向的文件。操作成功时,函数返回0值,失败返回非零值。【例【例12-412-4】写入多个字符串到磁盘文本文件test.txt。/*exam12_4*/#include stdio.h#include stdlib.h#include string.hint main(void)FILE*fp;char str128;if(fp=fopen(test.txt,w)=NULL)/*打开只打开只写的文本文件写的文本文件*/printf(cannot open file!);exit(0);(续)(续)可以写出test.txt的绝对路径,如:c:examplestest.txt。while(

    19、strlen(gets(str)!=0)/*若串长度为零,则结束若串长度为零,则结束*/fputs(str,fp);/*写入串写入串*/fputs(n,fp);/*写入回车符写入回车符*/fclose(fp);/*关文件关文件*/return 0;Hello!How do you do Good-bye!c:tctype test.txt Hello!How do you doGood-bye!运行后输入用type命令验证结果注意:应转入当前路径后使用type命令。演示12.3.3 读写一个数据块读写一个数据块fread()和和fwrite()实际应用中,常常要求1次读写1个数据块。为此,AN

    20、SI C 标准设置了 fread()和fwrite()函数。1用法:int fread(void*buffer,int size,int count,FILE*fp);int fwrite(void*buffer,int size,int count,FILE*fp);2功能:fread()从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中;同时,将读写位置指针向前移动size*count个字节。其中,buffer是存放读入数据的起始地址(即存放何处)。fwrite()从buffer开始,一次输出size个字节,重复coun

    21、t次,并将输出的数据存放到fp所指向的文件中;同时,将读写位置指针向前移动size*count个字节。其中,buffer是要输出数据在内存中的起始地址(即从何处开始输出)。如果调用fread()或fwrite()成功,则函数返回值等于count。fread()和fwrite()函数,一般用于二进制文件的处理。【例【例12-512-5】向磁盘写入格式化数据,再从该文件读出显示到屏幕。/*exam12_5exam12_5*/#include stdio.h#include stdlib.hint main(void)FILE*fp1;int i;struct stu/*定义结构体*/char na

    22、me15;char num6;float score2;student;if(fp1=fopen(test.txt,wb)=NULL)/*以二进制只写方式打开文件*/printf(cannot open file);exit(0);(续)printfprintf(input data:n);(input data:n);for(i=0;i2;i+)for(i=0;i2;i+)scanfscanf(%s%s%f%f,student.name,student.num,(%s%s%f%f,student.name,student.num,&student.score0,&student.score1

    23、);/&student.score0,&student.score1);/*输入一记录输入一记录*/fwrite(&student,sizeoffwrite(&student,sizeof(student),1,fp1);/(student),1,fp1);/*成块写入文件成块写入文件*/fclosefclose(fp1);(fp1);if(fp1=fopen(test.txt,rbif(fp1=fopen(test.txt,rb)=NULL)=NULL)/*重新以二进制只读打开文件重新以二进制只读打开文件*/printfprintf(cannot open file);(cannot ope

    24、n file);exit(0);exit(0);(续)(续)printfprintf(output from file:n);(output from file:n);for(i=0;i2;i+)for(i=0;i2;i+)fread(&student,sizeof fread(&student,sizeof(student),1,fp1);/(student),1,fp1);/*从文件成块从文件成块读读*/printfprintf(%s%s%7.2f%7.2fn,student.name,student.num,(%s%s%7.2f%7.2fn,student.name,student.nu

    25、m,student.score0,student.score1);/student.score0,student.score1);/*显示到屏幕显示到屏幕*/fclosefclose(fp1);(fp1);return 0;return 0;input data:xiaowan j001 87.5 98.4 xiaoli j002 99.5 89.6 output from file:xiaowan j001 87.50 98.40 xiaoli j002 99.50 89.60 运行情况:演示12.3.4 对文件进行格式化读写对文件进行格式化读写 前面的程序设计中,我们介绍过利用scanf(

    26、)和printf()函数从键盘格式化输入及在显示器上进行格式化输出。对文件的格式化读写就是在上述函数的前面加一个字母f成为fscanf()和fprintf()。其函数原型为:int fscanf(FILE int fscanf(FILE*stream,char stream,char*format,argformat,arg_list)_list)int fprintf(FILE int fprintf(FILE*stream,char stream,char*format,argformat,arg_list)_list)这两个函数的一般调用形式为:fscanffscanf(文件指针,格式控

    27、制串,输入地址表列文件指针,格式控制串,输入地址表列);fprintffprintf(文件指针,格式控制串,输出表列文件指针,格式控制串,输出表列);在使用上与标准的输入输出函数相同,只是fscanf()和fprintf()的输入输出是对文件进行。其实scanf()和printf()从广义上讲也是对文件进行,操作对象是对标准输入(stdin)输出(stdout)文件。【例【例12-612-6】将一些格式化的数据写入文本文件,再从该文件中以格式化方法读出显示到屏幕上,其格式化数据是两个学生记录,包括姓名、学号、两科成绩。/*exam12_6exam12_6*/#include stdio.h#i

    28、nclude stdlib.hint main(void)FILE*fp;int i;struct stu/*定义结构体类型*/char name15;char num6;float score2;student;/*说明结构体变量*/(续)if(fp=fopen(test.txt,w)=NULL)/*以文本只写方式打开文件*/printf(cannot open file);exit(0);printf(input data:n);for(i=0;i时)或后(当位移量时)移动的字节数。在ANSI C标准中,要求位移量为long int型数据。fseekfseek()()函数一般用于二进制文件

    29、函数一般用于二进制文件。12.4.3 12.4.3 返回文件当前位置的函数返回文件当前位置的函数ftellftell()()由于文件的位置指针可以任意移动,也经常移动,往往容易迷失当前位置,ftell()就可以解决这个问题。1用法:long ftelllong ftell(文件指针文件指针););2功能:返回文件位置指针的当前位置(用相对于文件头的位移量表示)。如果返回值为-1L,则表明调用出错。例如:offset=ftell(fp);i f(o f f s e t=-1L)printf(“ftell()errorn”);12.5 出错检测出错检测 12.5.1 12.5.1 ferrorfe

    30、rror()()函数函数 在调用输入输出库函数时,如果出错,除了函数返回值有所反映外,也可利用ferror()函数来检测。1用法:int ferrorint ferror(文件指针文件指针);2功能:如果函数返回值为0,表示未出错;如果返回一个非0值,表示出错。(1)对同一文件,每次调用输入输出函数均产生一个新的ferror()函数值。因此在调用了输入输出函数后,应立即检测,否则出错信息会丢失。(2)在执行fopen()函数时,系统将ferror()的值自动置为0。12.5.2 12.5.2 clearerrclearerr()()函数函数1用法:void clearerrvoid clearerr(文件指针文件指针);2功能:将文件错误标志(即ferror()函数的值)和文件结束标志(即feof()函数的值)置为0。对同一文件,只要出错就一直保留,直至遇到clearerr()函数或rewind()函数,或其它任何一个输入输出库函数。作业与实验作业:习题十二?上机操作:实验十二Return

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:c语言学习c语言课件-第12章.ppt
    链接地址:https://www.163wenku.com/p-3471051.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库