版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第十一章 文件提纲1、数据的层次结构2、文件概述4、位置指针与文件定位5、文件的读写操作6、顺序文件的操作7、随机文件的操作2文件的打开:FILE*fopen( const char * filename,const char* mode);文件的关闭:intf(FILE* stream);3缓冲区fPtrFILE346页见bufferfd打开文件表01打开文件的操作:1、创建FILE类型2、创建缓冲区;.dat;FCB for.dat83、将缓冲区首地址、文件写入FILE块(FCB)在打开文件表中的下标48提纲1、数据的层次结构2、文件概述3、文件的打开和关闭5、文件的读写操作6、顺序文件
2、的操作7、随机文件的操作5文件位置指针的概念不是真正的指针,而是指向下一次读写操作所在 字节的整数值。每次读写1个(或1组)数据后,系统自动将文件位置指针移动到下一个读写位置上。3个文件位置指针相关函数:位置指针复位函数int位置指针移动函数rewind(FILE * stream);int fseek(FILE *stream,位移量,参照点);返回文件位置指针当前位置函数longftell(FILE *stream);6提纲1、数据的层次结构2、文件概述3、文件的打开和关闭4、位置指针与文件定位6、顺序文件的操作7、随机文件的操作711.5文件的读写操作12.3.1读写文件中的一个字符(文
3、本文件)fputc和 fgetc12.3.2读写一个字符串(文本文件)fputs和 fgets12.3.3对文件进行格式化读写(文本文件)fscanf和fprintf12.3.4f读写一个数据块(二进制文件)和fwrite8二、读写一个字符串fgets()和fputs()1、 库函数fputs()向指定文件输出一个字符串1)用法:intfputs(const char *s,FILE * stream);2)功能:将s所指向的字符串写入stream所指向的流中(0不被写入),同时将文件位置指针向前移动字符串长度个字节,指向下一写入位置。如果发生写错误,则函数返回EOF;否则,返回一个非负值。f
4、puts(s, stdout)等价于puts(s) ,将s所指向的字符串写入到标准输出流。9二、读写一个字符串fgets()和fputs()2、 库函数fgets()从文件中读一个字符串1)用法:char* fgets(char * s,int n,FILE * stream);2)功能:从stream指向的流中最多n1个字放到s所指向的数组中,读到新行符(n)或者文件结束符后不再向后读。最后一个字符读入数组后接着写入结束标志0 ,并将文件位置指针向前移动n1(字符串长度)个字节。如果遇到文件结束且没有字符读入数组,则数组内容不变。详见书上467页。10#include<stdio.h&
5、gt;main()char s15, char s2100;FILE * fPtr;data.txtif(fPtr=fopen(".dat","r")=NULL)printf("open file errorn"); elsefgets(s1,5,fPtr); printf("%s",s1); rewind(fPtr); fgets(s2,100,fPtr); printf("%s",s2);f(fPtr);system("pause");11WherWhere there
6、is life,请按任意键继续. . .Where there is life,There is hope.例4设计函数:将一个文本文件逐行赋制到另一 文本文件中。void copyFile(char * sourceFileName, char * destFileName)char s100;FILE * sourcefPtr,*destfPtr; if(sourcefPtr=fopen(sourceFileName,"r")=NULL)printf("can't open the source filen");else if(destfPt
7、r=fopen(destFileName,"w")=NULL) printf("can't open the dest filen");elsefgets(s,sizeof(s),sourcefPtr); / 从源文件一行字符到数组swhile(!feof(sourcefPtr)/换行符fputs(s,destfPtr); /将s中的字符串写入文件中fgets(s,sizeof(s),sourcefPtr);f f(sourcefPtr); (destfPtr);12二、读写一个字符串fgets()和fputs()思考fgets(s,sizeof
8、(s),stdin); while(!feof(stdin)fputs(s,stdout); fgets(s,sizeof(s),stdin);输入:输出将以上语句改写成以下语句会两次!为什么?while(!feof(stdin) fgets(s,sizeof(s),stdin); fputs(s,stdout);131. 只有当了文件结束符后,feof才返回1。2. fgets如果遇到文件结束且没有字符读入数组,则数组内容不变This is an example:This is an exampleThis is an exampleZ三、 对文件进行格式化读写fscanf()和fprint
9、f()函数1 、 intfscanf(FILE*stream , constchar*format,输入变量首地址表);/*读文件*/从stream指向的流中字符序列,按照format中的格式规格说明对字符序列进行解释,并把结果在变量中。如:fscanf(fPtr,"%d,%f", &i, &f); 25,10.34fscanf(stdin,const char * format,输入变量首地址表);i等价于intscanf(const char * format,输入变量首地址表);14三、 对文件进行格式化读写fscanf()和fprintf()函数2
10、、intfprintf(FILE*stream , constchar*format ,输出参量表); /*写文件*/例如,.int i=3; float f=9.80; fprintf(fPtr,"%2d,%6.2f", i, f);.fprintf()函数的作用是,将变量i按%2d格式、变量f按%6.2f格式, 以逗号作分隔符,输出到fPtr所指向的文件中:3,9.80(表示1个空格)。printf (const char * format,输出变量首地址表)等价于fprintf (stdout,const char * format,输出变量首地址表)15四、读写一个
11、数据块f()和fwrite()intfwrite(void *buffer , int size , int count ,FILE * stream);fwrite()将buffer所指向的数组的内容写入stream所指向的流中。size表示数组元素大小, 最多写入count 个数组元素。流的文件位置指针根据写入的字符数递增。函数返回写入的元素个数,如果遇到写错误,返回值可能小于count。16四、读写一个数据块f()和fwrite()intfwrite(void *buffer,int size,int count,FILE * stream);structstu3, aStu;/把数组s
12、tu中所有元素fwrite(stu, sizeof(struct/把变量aStu中内容写入文件中fwrite(& aStu, sizeof(struct写入文件中), 3 , stream);), 1,stream);/一个字节写入字符变量ch中fwrite(& ch, sizeof(char), 1,stream);17四、读写一个数据块f()和fwrite()intf(void *buffer,int size,int count,FILE* stream);从stream所指向的流中数据到buffer所指向的数组中,size表示数组元素大小,最多count个数组元素,流的
13、文件位置指针根据写入的字符数递增。 函数返回读入的元素个数。如果发生读错误, 则返回值可能小于count。18四、读写一个数据块f()和fwrite()intf(void *buffer,int size,int cou,FILE * stream);struct/ 从文件stu3, aStu;3条写入数组stu中f(stu, sizeof(struct), 3 , stream);/一条写入结构变量aStu中f/ f(& aStu, sizeof(struct一个字节写入字符变量ch中), 1,stream);(& ch, sizeof(char), 1,stream);19
14、提纲1、数据的层次结构2、文件概述3、文件的打开和关闭4、位置指针与文件定位5、文件的读写操作7、随机文件的操作20两种选择:使用顺序文件或者随机文件21姓名身高wangli191.78Zhouxiaohua181.65lilin171.7011.6顺序存取文件的操作顺序存取文件特点:文件中的新的可以有不同的长度。到文件尾。只能不能直接快速地文件中的某一,而必须从文件中第一个开始。使用 fscanf和fprintf函数(顺序文件是ASCII码文件)22随机存取文件特点: 新通常具有相同的长度。可以到希望的位置。 能够直接快速地定位、录。文件中的某一记 使用f文件)和fwrite函数(随机文件是
15、二进制23例5设计函数,将键盘上输入若干(以Ctrl+Z结束),到指定顺序文件中void writeFileFromKeyboard(char * filename)int;char name30; float balance;FILE * fPtr=NULL;if( (fPtr=fopen(filename,"w")!=NULL)/打开文件scanf("%d%s%f",& while ( !feof(stdin),name,&balance);/组合键ctrl+Z表示文件结束符fprintf(fPtr,"%5d%13s%10.
16、2fn",name,balance);scanf("%d%s%f",&,name,&balance);f(fPtr); /*关闭文件*/end of if24注意:将一个写入文件1时,必须将n 作为结束符写入文件1,否则从文件1中时最后一个无法!按书上11-3将使得程序11-5无法正确运行fprintf(destfPtr,"%d%s%.2fn", lance);改成:fprintf(cfPtr,"%5d%13s%10.2fn", balance);即可,name,ba,name,25例6设计函数:将一顺序文件
17、逐赋制到另一顺序文件中。void copyFile(char * sourceFileName,char * destFileName)int;char name30; float balance;FILE * sourcefPtr,*destfPtr;if(sourcefPtr=fopen(sourceFileName,"r")=NULL) printf("can't open the source filen");else if(destfPtr=fopen(destFileName,"w")=NULL) printf(&
18、quot;can't open the dest filen");26else/从源文件中一条fscanf(sourcefPtr,"%d%s%f",&while(!feof(sourcefPtr)/向目标文件写入一条fprintf(destfPtr,"%5d%13s%10.2fn", fscanf(sourcefPtr,"%d%s%f",&,name,&balance);,name,balance);,name,&balance);f f(sourcefPtr); (destfPtr)
19、;磁盘文件271001 zhou 1021002 yang 1031001 zhou 1021002 yang 103 CTRLZ提纲1、数据的层次结构2、文件概述3、文件的打开和关闭4、位置指针与文件定位5、文件的读写操作6、顺序文件的操作2811.7随机存取文件的操作一、随机存取文件特点:通常具有相同的长度。能够直接快速地文件中的某一。为了能在文件中不同的位置随机写入必须对文件先初始化,根据要写入的总数占据字节数。,2911.7随机存取文件的操作二、按顺序建立一个随机存取文件(文件初始化)#include<stdio.h>structDataint acctNum;char l
20、astName15; char firstName10;float balance;30main()int i; structData blank=0,"","",0.0;FILE * cfPtr;if ( (cfPtr=fopen(".dat","w")=NULL ) /*打开文件*因为用fwrite函数,所以创建的是二进制文件printf("File could not be openedn"); elsefor(i=1;i<=2;i+)fwrite(&blank(cfPtr)
21、;,sizeof(structData),1,cfPtr);freturn 0;3111.7随机存取文件的操作三、把数据随机地写入随机存取文件main()struct思考:文件打开模式设为“w”可以否?Data;FILE * cfPtr;if ( (cfPtr=fopen(“.dat”,“r+")=NULL )printf("File could not be openedn");32elseprintf("Enterscanf("%d",&number(1 to 100,0 to end input)n");.ac
22、ctNum);while (.acctNum!=0)printf("Enter lastname,firstname,balancen?");scanf("%s%s%f",.lastName,.firstName,&.balance);/根据帐户号码将文件位置指针定位到待写入位置,然后写入fseek(cfPtr,( fwrite(& printf("Enterscanf("%d",&.acctNum-1)*sizeof(structData),SEEK_SET);,sizeof(structData),1,cfPtr);number(1 to 100,0 to end input)n");.acctNum);f(cfPtr);return 0;3311.7随机存取文件的操作四、按顺序main()struct一个随机存取文件Data;FILE * cfPtr;if ( (cfPtr=fopen(".dat","r")=NULL )printf("File could not be openedn");3411.7随机存取文件的操作elseprintf("%-6s%-16s%- 11s%10sn&quo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云南省德宏州2025-2026学年八年级下学期初中学业水平考试模拟监测地理试卷(含答案)
- 山东乡镇岗位试题及细致答案说明
- 货币银行学综合试题及答案梳理
- 汽车4S店财务试用期转正转正总结
- 钢琴中级考试常见试题及对应答案
- 呕吐的试题及答案
- 体型美学试题及答案
- 2025届三明市尤溪县数学三年级第二学期期中综合测试模拟试题含答案解析
- 2026年宋词名篇赏析与背诵测试
- 2025-2026学年黑龙江哈尔滨市木兰县东兴镇向阳小学数学四下期中统考模拟试题(含解析)
- 蔬菜采购述职报告
- 25版:学案89 掌握议论文写作结构导图(高分式)-借助导图形成思路
- JJG 1009-2024X、γ辐射个人剂量当量HP(10)监测仪检定规程
- 2024年T+产品历年考试高频考点试题附带答案
- 抑郁症健康教育知识讲座
- 肿瘤多组学研究
- FLUKE1550C电子兆欧表使用介绍
- GB/T 29008-2012农林轮式拖拉机行车制动装置的性能要求
- 模电实验元件识别和仪器使用课件
- 浦东新区青青年心理健康教育三年行动打算
- T-CCIAT 0043-2022 建筑工程渗漏治理技术规程
评论
0/150
提交评论