![C语言系列课件_第1页](http://file4.renrendoc.com/view/1a5cd9520bba5d373548f8da862e9aa9/1a5cd9520bba5d373548f8da862e9aa91.gif)
![C语言系列课件_第2页](http://file4.renrendoc.com/view/1a5cd9520bba5d373548f8da862e9aa9/1a5cd9520bba5d373548f8da862e9aa92.gif)
![C语言系列课件_第3页](http://file4.renrendoc.com/view/1a5cd9520bba5d373548f8da862e9aa9/1a5cd9520bba5d373548f8da862e9aa93.gif)
![C语言系列课件_第4页](http://file4.renrendoc.com/view/1a5cd9520bba5d373548f8da862e9aa9/1a5cd9520bba5d373548f8da862e9aa94.gif)
![C语言系列课件_第5页](http://file4.renrendoc.com/view/1a5cd9520bba5d373548f8da862e9aa9/1a5cd9520bba5d373548f8da862e9aa95.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第13章
文
件在程序运行时,程序本身和数据一般都存放在内存中。当程序运行结束后,存放在内存中的数据被释放。如果需要长期保存程序运行所需的原始数据,或程序运行产生的结果,就必须以文件形式存储到外部存储介质上。13.1C语言文件概述13.2文件的打开与关闭13.3文件的读写操作13.4位置指针与文件定位13.5出错检测[Return]
13.1C语言文件概述1.文件与文件名
文件是指存放在外部存储介质上的数据集合。为标识一个文件,每个文件都必须有一个文件名,其一般结构为:主文件名[.扩展名]
文件命名规则,遵循操作系统的约定。2.文件分类可以从不同的角度对文件进行分类:(1)根据文件的内容,可分为程序文件和数据文件,程序文件又可分为源文件、目标文件和可执行文件。(2)根据文件的组织形式,可分为顺序存取文件和随机存取文件。(3)根据文件的存储形式,可分为ASCII码文件和二进制文件。ASCII码文件的每1个字节存储1个字符,因而便于对字符进行逐个处理。但一般占用存储空间较多,而且要花费转换时间(二进制与ASCII码之间的转换)。二进制文件是把内存中的数据,原样输出到磁盘文件中。可以节省存储空间和转换时间,但1个字节并不对应1个字符,不能直接输出字符形式。3.读文件与写文件所谓读文件是指,将磁盘文件中的数据传送到计算机内存的操作。所谓写文件是指,从计算机内存向磁盘文件中传送数据的操作。6.ANSIC的缓冲文件系统所谓缓冲文件系统是指,系统自动地在内存区为每个正在使用的文件开辟一个缓冲区。从内存向磁盘输出数据时,必须首先输出到缓冲区中。待缓冲区装满后,再一起输出到磁盘文件中。从磁盘文件向内存读入数据时,则正好相反:首先将一批数据读入到缓冲区中,再从缓冲区中将数据逐个送到程序数据区。[Return]13.2文件的打开与关闭对文件进行操作之前,必须先打开该文件;使用结束后,应立即关闭,以免数据丢失。C语言规定了标准输入输出函数库,用fopen()函数打开一个文件,用fclose()函数关闭一个文件。
13.2.1文件的打开──fopen()函数1.用法:FILE*fopen("文件名","操作方式");2.功能:返回一个指向指定文件的指针。3.函数原型:stdio.h。注:对文件操作的库函数,函数原型均在头文件stdio.h中。后续函数不再赘述。(1)“文件名”是指要打开(或创建)的文件名。如果使用字符数组(或字符指针),则不使用双引号。(2)“操作方式”如表12-1所示。例如,FILE*fp;fp=fopen("data.99","r");3.说明(1)如果不能实现打开指定文件的操作,则fopen()函数返回一个空指针NULL(其值在头文件stdio.h中被定义为0)。为增强程序的可靠性,常用下面的方法打开一个文件:
if((fp=fopen("文件名","操作方式"))==NULL){printf("cannotopenthisfile\n");exit(0);}使用二进制文件时,内存中的数据形式与数据文件中的形式完全一样,就不再进行转换。(4)有些C编译系统,可能并不完全提供上述对文件的操作方式,或采用的表示符号不同,请注意所使用系统的规定。(5)在程序开始运行时,系统自动打开三个标准文件,并分别定义了文件指针:1)标准输入文件——stdin:指向终端输入(一般为键盘)。如果程序中指定要从stdin所指的文件输入数据,就是从终端键盘上输入数据。2)标准输出文件——stdout:指向终端输出(一般为显示器)。3)标准错误文件——stderr:指向终端标准错误输出(一般为显示器)。13.2.2文件的关闭──fcolse()函数1.用法:intfclose(FILE*文件指针);2.功能:关闭“文件指针”所指向的文件。如果正常关闭了文件,则函数返回值为0;否则,返回值为非0。例如,fclose(fp);/*关闭fp所指向的文件*/[Return]13.3文件的读写操作文件打开之后,就可以对它进行读与写的操作了。13.3.1读/写文件中的一个字符
13.3.2读/写一个字符串13.3.3读/写一个数据块13.3.4对文件进行格式化读/写13.3.5读/写函数的选用原则
[Return]if((fp=fopen(argv[1],"w"))==NULL) /*打开文件失败*/{printf("cannotopenthisfile\n");exit(0);}/*输入字符,并存储到指定文件中*/for(;(ch=getchar())!='@';)fputc(ch,fp); /*输入字符并存储到文件中*/fclose(fp); /*关闭文件*/} [程序演示]程序运行情况:abcdefg1234567@←┘库函数fputc():1)用法:intfputc(字符数据,文件指针);其中“字符数据”,既可以是字符常量,也可以是字符变量。2)功能:将字符数据输出到“文件指针”所指向的文件中去,同时将读写位置指针向前移动1个字节(即指向下一个写入位置)。如果输出成功,则函数返回值就是输出的字符数据;否则,返回一个符号常量EOF(其值在头文件stdio.h中,被定义为-1)。2.从文件中读入一个字符──fgetc()函数和feof()函数[案例13.2]顺序显示[案例13.1]创建的磁盘ASCII码文件。/*案例代码文件名:AL12_2.C*//*程序功能:顺序显示一个磁盘ASCII码文件*//*参数:带参主函数,使用格式:可执行文件名源文件名*/#include"stdio.h"main(intargc,char*argv[]){FILE*fp;charch;if(argc!=2) /*参数个数不对*/{printf("thenumberofargumentsnotcorrect\n");printf(“\nUsage:可执行文件名源文件名");exit(0);}(1)库函数fgetc()1)用法:intfgetc(文件指针);2)功能:从“文件指针”所指向的文件中,读入一个字符,同时将读写位置指针向前移动1个字节(即指向下一个字符)。该函数无出错返回值。例如,fgetc(fp)表达式,从文件fp中读一个字符,同时将fp的读写位置指针向前移动到下一个字符。(2)关于符号常量EOF在对ASCII码文件执行读入操作时,如果遇到文件尾,则读操作函数返回一个文件结束标志EOF(其值在头文件stdio.h中被定义为-1)。在对二进制文件执行读入操作时,必须使用库函数feof()来判断是否遇到文件尾。[案例13.3]实现制作ASCII码文件副本的功能。/*案例代码文件名:AL12_2.C*//*程序功能:制作ASCII码文件的副本*//*使用格式:可执行文件名源文件名目标文件名*/#include"stdio.h"main(intargc,char*argv[]){FILE*input,*output; /*input:源文件指针,output:目标文件指针*/charch;if(argc!=3)/*参数个数不对*/{printf("thenumberofargumentsnotcorrect\n");printf("\nUsage:可执行文件名source-filedest-file");exit(0);}if((fp=fopen(argv[1],"r"))==NULL) /*打开源文件失败*/{printf("cannotopensourcefile\n");exit(0);}if((fp=fopen(argv[2],"w"))==NULL)/*创建目标文件失败*/{printf("cannotcreatedestinationfile\n");exit(0);}/*复制源文件到目标文件中*/for(;(!feof(input));)fputc(fgetc(input),output);fclose(input);fclose(output); /*关闭源文件和目标文件*/} [程序演示]13.3.2读/写一个字符串──fgets()和fputs()[案例13.4]将键盘上输入的一个长度不超过80的字符串,以ASCII码形式存储到一个磁盘文件中;然后再输出到屏幕上。/*案例代码文件名:AL12_4.C*//*参数:可执行文件名要创建的磁盘文件名*/#include"stdio.h"main(intargc,char*argv[]){FILE*fp;charstring[81]; /*字符数组用于暂存输入输出的字符串*/if(argc>2)/*参数太多,提示出错*/{printf("Toomanyparameters…\n\n"); printf("Usage:可执行文件名\n");exit(0);}if(argc==1) /*缺磁盘文件名,提示输入*/{printf("Inputthe:");gets(string); /*借用string暂存输入的文件名*/argv[1]=(char*)malloc(strlen(string)+1);/*给文件名参数申请内存空间*/strcpy(argv[1],string);/*复制文件名到形参中*/}if((fp=fopen(argv[1],"w"))==NULL) /*打开文件失败*/{printf("cannotopenthisfile\n"); exit(0);}/*从键盘上输入字符串,并存储到指定文件中*/printf("Inputastring:");gets(string); /*从键盘上输入字符串*/fputs(string,fp); /*存储到指定文件*/fclose(fp);/*重新打开文件,读出其中的字符串,并输出到屏幕上*/if((fp=fopen(argv[1],"r"))==NULL) /*打开文件失败*/{printf("cannotopenthisfile\n");exit(0);}fgets(string,strlen(string)+1,fp); /*从文件中读一个字符串*/printf("Outputthestring:");puts(string); /*将字符串输出到屏幕上*/fclose(fp);} [程序演示]
(1)为增强程序的可靠性,程序中对参数过多的情况,提示出错、并终止程序运行;而遗漏文件名时,提示用户输入。同时,为增强程序的人机交互性,凡是需要用户输入数据的地方,都设置提示输入的信息;凡是输出数据的地方,都设置输出说明信息。13.3.3读/写一个数据块──fread()和fwrite()实际应用中,常常要求1次读/写1个数据块。为此,ANSIC标准设置了fread()和fwrite()函数。1.用法:intfread(void*buffer,intsize,intcount,FILE*fp);intfwrite(void*buffer,intsize,intcount,FILE*fp);
2.功能:fread()──从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中;同时,将读写位置指针向前移动size*count个字节。其中,buffer是存放读入数据的起始地址(即存放何处)。fwrite()──从buffer开始,一次输出size个字节,重复count次,并将输出的数据存放到fp所指向的文件中;同时,将读写位置指针向前移动size*count个字节。其中,buffer是要输出数据在内存中的起始地址(即从何处开始输出)。如果调用fread()或fwrite()成功,则函数返回值等于count。fread()和fwrite()函数,一般用于二进制文件的处理。[Return]13.3.5读/写函数的选用原则从功能角度来说,fread()和fwrite()函数可以完成文件的任何数据读/写操作。但为方便起见,依下列原则选用:1.读/写1个字符(或字节)数据时:选用fgetc()和fputc()函数。2.读/写1个字符串时:选用fgets()和fputs()函数。3.读/写1个(或多个)不含格式的数据时:选用fread()和fwrite()函数。4.读/写1个(或多个)含格式的数据时:选用fscanf()和fprintf()函数。[Return]13.4位置指针与文件定位文件中有一个读写位置指针,指向当前的读写位置。每次读写1个(或1组)数据后,系统自动将位置指针移动到下一个读写位置上。
如果想改变系统这种读写规律,可使用有关文件定位的函数。
13.4.1位置指针复位函数rewind()1.用法:intrewind(文件指针);2.功能:使文件的位置指针返回到文件头。13.4.2随机读写与fseek()函数对于流式文件,既可以顺序读写,也可随机读写,关键在于控制文件的位置指针。
所谓顺序读写是指,读写完当前数据后,系统自动将文件的位置指针移动到下一个读写位置上。所谓随机读写是指,读写完当前数据后,可通过调用fseek()函数,将位置指针移动到文件中任何一个地方。1.用法:intfseek(文件指针,位移量,参照点);2.功能:将指定文件的位置指针,从参照点开始,移动指定的字节数。(1)参照点:用0(文件头)、1(当前位置)和2(文件尾)表示。在ANSIC标准中,还规定了下面的名字:SEEK_SET──文件头,SEEK_CUR──当前位置,SEEK_END──文件尾(2)位移量:以参照点为起点,向前(当位移量>0时)或后(当位移量<0时)移动的字节数。在ANS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2031年中国超五类接插软线行业投资前景及策略咨询研究报告
- 2025至2031年中国组织捣磷匀浆机行业投资前景及策略咨询研究报告
- 2025至2031年中国玻璃瓶罐热缩包装机行业投资前景及策略咨询研究报告
- 2025年水洗高岭土项目可行性研究报告
- 2025年新型铝屑粉碎机项目可行性研究报告
- 2025至2031年中国室外休闲用品行业投资前景及策略咨询研究报告
- 2025年复合磷酸锌项目可行性研究报告
- 2025至2031年中国丙烯基硫脲行业投资前景及策略咨询研究报告
- 2025年便携式磁探钳项目可行性研究报告
- 2025年o型圈项目可行性研究报告
- Unit 1 Nice boys and girls【知识精研】-一年级英语下学期(人教PEP版一起)
- 《口腔科学绪论》课件
- 《消防检查指导手册》(2024版)
- 粤教粤科版三年级下册科学全册课时练(同步练习)
- 小学开学第一课禁毒安全
- 《婚恋观教育》课件
- 10以内除法口算练习题100套(十)
- 中医小儿常见皮肤病
- 《医疗机构环境表面清洁与消毒管理规范》-华西医院案例
- 第45届世界技能大赛餐厅服务项目全国选拔赛技术工作文件
- 个人保证无纠纷承诺保证书
评论
0/150
提交评论