




已阅读5页,还剩75页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言大学教程课件(第11章),教材编著:PaulDeitel(美国)HarveyDeitel(美国)翻译:苏小红等(哈尔滨工业大学)课件制作:杨晓东(郑州大学)授课教师:杨晓东,1,第11章文件处理,本章主要内容文件的基本操作方法顺序存取文件的使用随机存取文件的使用,2,第11章文件处理,11.1引言将数据存储在变量或者数组中,都只能是暂时的程序运行结束时,这些数据就会丢失文件是用来永久存储数据的。文件可长久储存在硬盘、U盘、光盘等存储器上。,3,第11章文件处理,11.2数据的层次结构位:最简单的数据项,用0和1表示字符:8位二进制数。包括数字、字母等域:由一组表示特定意义的字符构成。记录:由一组相关的域构成。记录键:用于识别一个记录的某个域文件:由若干个记录构成。数据库:一组相关的文件可以构成数据库,4,第11章文件处理,11.2数据的层次结构,5,第11章文件处理,11.3文件与流文件与字符流相对应标准输入流:stdin标准输出流:stdout标准错误流:stderr每次打开文件都会返回一个指向FILE结构体的指针FILE结构体:文件描述头,即打开文件列表。,6,第11章文件处理,11.3文件与流支持文件读、写的函数fgetc:从文件读入一个字符intfgetc(FILE*stream);fputc:向文件写入一个字符intfputc(charch,FILE*stream);fgets:从文件读入一行字符char*fgets(char*s,intn,FILE*stream);,7,第11章文件处理,11.3文件与流支持文件读、写的函数fputs:向文件写入一行字符char*fputs(char*s,FILE*stream);fscanf:从文件读入格式化字符intfcanf(FILE*stream,char*format,);fprintf:向文件写入格式化字符intfprintf(FILE*stream,char*format,);,8,第11章文件处理,11.3文件与流支持文件读、写的函数fread:从文件读入一定字节数目的字符intfread(char*s,size_tsize,size_tn,FILE*stream);fwrite:向文件写入定字节数目的字符intfwrite(char*s,size_tsize,size_tn,FILE*stream);,9,第11章文件处理,11.4顺序存取文件的创建顺序存取文件:访问时必须按照记录的顺序依次进行每个记录含有相同类型的项目各个记录的字节长度可能不同,10,第11章文件处理,11.4顺序存取文件的创建图11.3程序:顺序文件的建立1/*Fig.11.3:fig11_03.c2Createasequentialfile*/3#include45intmain(void)67intaccount;,11,第11章文件处理,11.4顺序存取文件的创建图11.3程序:顺序文件的建立8name30;9doublebalance;1011FILE*cfPtr;1213/*fopenopensfile.Exitprogramifunabletocreatefile*/,12,第11章文件处理,11.4顺序存取文件的创建图11.3程序:顺序文件的建立14if(cfPtr=fopen(“clients.dat”,“w”)=NULL)15printf(“Filecouldnotbeopenedn”);1617else18printf(“Entertheaccount,name,andbalance.n”);,13,第11章文件处理,11.4顺序存取文件的创建图11.3程序:顺序文件的建立19printf(“EnterEOFtoendinput.n”);20printf(“?“);21scanf(“%d%s%lf”,2223/*writeaccount,nameandbalanceintofilewithfprintf*/,14,第11章文件处理,11.4顺序存取文件的创建图11.3程序:顺序文件的建立24while(!feof(stdin)25fprintf(cfPtr,“%d%s%.2fn”,account,name,balance);26printf(“?”);27scanf(“%d%s%lf”,15,第11章文件处理,11.4顺序存取文件的创建图11.3程序:顺序文件的建立28/*endwhile*/2930fclose(cfPtr);31/*endelse*/3233return0;34/*endmain*/,16,第11章文件处理,11.4顺序存取文件的创建图11.3程序执行结果Entertheaccount,name,andbalanceEnterEOFtoendinput.?100Jones24.98?200Doe345.67?300White0.00?400Stone-42.16?500Rich224.62z,17,第11章文件处理,11.4顺序存取文件的创建打开文件:FILE*fopen(文件名,打开模式);成功:返回指针失败:返回NULL文件打开模式w:文本写操作。若文件不存在,创建新文件;若存在则覆盖。r:文本读操作。文件必须存在。a:文本添加操作。在尾部添加。,18,第11章文件处理,11.4顺序存取文件的创建文件打开模式w+:写方式打开文本文件,同时允许读文件操作r+:读方式打开文本文件,同时允许写文件操作a+:添加方式打开文本文件,同时允许读、写文件操作wb:二进制写操作rb:二进制读操作ab:二进制添加操作,19,第11章文件处理,11.4顺序存取文件的创建文件打开模式wb+:写方式打开二进制文件,同时允许读文件操作rb+:读方式打开二进制文件,同时允许写文件操作ab+:添加方式打开二进制文件,同时允许读、写文件操作,20,第11章文件处理,11.4顺序存取文件的创建文件打开模式,21,第11章文件处理,11.5从顺序存取文件中读取数据图11.7程序:顺序读取数据1/*Fig.11.7:fig11_07.c2ReadingandprintingaSequentialfile*/3#include45intmain(void)67intaccount;,22,第11章文件处理,11.5从顺序存取文件中读取数据图11.7程序:顺序读取数据8name30;9doublebalance;1011FILE*cfPtr;1213/*fopenopensfile.Exitprogramifunabletocreaterile*/,23,第11章文件处理,11.5从顺序存取文件中读取数据图11.7程序:顺序读取数据14if(cfPtr=fopen(“clients.dat”,“w”)=NULL)15printf(“Filecouldnotbeopenedn”);1617else18printf(“%-10s%-13s%sn”,”account”,“name”,“balance”);,24,第11章文件处理,11.5从顺序存取文件中读取数据图11.7程序:顺序读取数据19fscanf(“cfPtr,“%d%s%lf”,25,第11章文件处理,11.5从顺序存取文件中读取数据图11.7程序:顺序读取数据24fscanf(“cfPtr,“%d%s%lf”,28/*endelse*/29,26,第11章文件处理,11.5从顺序存取文件中读取数据图11.7程序:顺序读取数据30return0;31/*endmain*/,27,第11章文件处理,11.5从顺序存取文件中读取数据图11.7程序执行结果AccountNameBalance100Jones24.98200Doe345.67300White0.00400Stone-42.16500Rich224.62,28,第11章文件处理,11.5从顺序存取文件中读取数据多次读取文件时可以将文件复位复位函数:rewind(cfPtr);文件偏移量:距文件开头的字节数重新定位文件指针指向文件的开头文件偏移量为0,29,第11章文件处理,11.5从顺序存取文件中读取数据例:向文件输出数据类型的字节长度请编写一个程序,使用运算符sizeof来确定不同数据类型在您的计算机系统中的字节长度。将结果写入文件datasize.dat中,这样今后就可以随时打印结果。按照如下格式将结果写入文件。(注:在您的计算机上长度结果可能有所不同)DatatypeSizechar1unsignedchar1,30,第11章文件处理,11.5从顺序存取文件中读取数据例:向文件输出数据类型的字节长度shortint2unsignedshortint2int4unsignedint4longint4unsignedlongint4,31,第11章文件处理,11.5从顺序存取文件中读取数据例:向文件输出数据类型的字节长度float4double8longdouble16,32,第11章文件处理,11.5从顺序存取文件中读取数据例:向文件输出数据类型的字节长度/*hw11.16.c*/#include#defineSIZE100intmain()FILE*fPtr;,33,第11章文件处理,11.5从顺序存取文件中读取数据例:向文件输出数据类型的字节长度charstrSIZE;fPtr=fopen(“datasize.dat,w+);if(fPtr=NULL)printf(创建文件datasize.dat失败n);,34,第11章文件处理,11.5从顺序存取文件中读取数据例:向文件输出数据类型的字节长度elsefprintf(fPtr,%-30s%4sn,Datatype,Size);fprintf(fPtr,%-30s%4dn,char,sizeof(char);,35,第11章文件处理,11.5从顺序存取文件中读取数据例:向文件输出数据类型的字节长度fprintf(fPtr,%-30s%4dn,unsignedchar,sizeof(unsignedchar);fprintf(fPtr,%-30s%4dn,short,sizeof(short);fprintf(fPtr,%-30s%4dn,unsignedshort,sizeof(unsignedshort);,36,第11章文件处理,11.5从顺序存取文件中读取数据例:向文件输出数据类型的字节长度fprintf(fPtr,%-30s%4dn,int,sizeof(int);fprintf(fPtr,%-30s%4dn,unsignedint,sizeof(unsignedint);fprintf(fPtr,%-30s%4dn,longint,sizeof(longint);,37,第11章文件处理,11.5从顺序存取文件中读取数据例:向文件输出数据类型的字节长度fprintf(fPtr,%-30s%4dn,unsignedlongint,sizeof(unsignedlongint);fprintf(fPtr,%-30s%4dn,float,sizeof(float);fprintf(fPtr,%-30s%4dn,double,sizeof(double);,38,第11章文件处理,11.5从顺序存取文件中读取数据例:向文件输出数据类型的字节长度fprintf(fPtr,%-30s%4dn,longdouble,sizeof(longdouble);if(fPtr!=NULL),39,第11章文件处理,11.5从顺序存取文件中读取数据例:向文件输出数据类型的字节长度printf(将文件datasize.data中的内容显示在屏幕上n);rewind(fPtr);fgets(str,SIZE,fPtr);while(!feof(fPtr)printf(%s,str);fgets(str,SIZE,fPtr);,40,第11章文件处理,11.5从顺序存取文件中读取数据例:向文件输出数据类型的字节长度/*endwhile*/fclose(fPtr);/*endif*/return0;/*endmain*/,41,第11章文件处理,11.5从顺序存取文件中读取数据例:向文件输出数据类型的字节长度程序执行结果,42,第11章文件处理,11.6随机存取文件随机存取文件记录是等长的可以直接访问任一个记录可方便地进行插入、更改或删除操作。,43,第11章文件处理,11.7随机存取文件的创建函数fwrite:将内存中特定字节数目的数据存到文件中:FILE*fPtr;intnumber=102;fwrite(,44,第11章文件处理,11.7随机存取文件的创建函数fwrite:将内存中特定字节数目的数据存到文件中intnArray2=102,20;fwrite(nArray,sizeof(int),2,fPtr);函数fread:将文件中特定字节数目的数据输入到内存中fread(nArray,sizeof(int),2,fPtr);,45,第11章文件处理,11.7随机存取文件的创建问题创建一个最多能够存储100个固定长度记录的信用处理系统。每个记录都包含账号、姓、名和余额等四个域。其中账号作为记录键。最后完成的程序应该能够更新一个账号,插入一个新的账号记录,删除一个账号以及能够按照格式化文本文件的形式列出所有账号记录以供打印。请采用随机存取文件。,46,第11章文件处理,11.7随机存取文件的创建图11.11程序:创建随机存取文件1/*Fig.11.11:fig11.11.c2Createarandom-accessfilesequentiallly*/3#include45/*clientDatastructuredefinition*/,47,第11章文件处理,11.7随机存取文件的创建图11.11程序:创建随机存取文件6structclientData7intacctNum;8charlastName15;9charfirstName11;10doublebalance;11;/*endstructureclientData*/12,48,第11章文件处理,11.7随机存取文件的创建图11.11程序:创建随机存取文件13intmain(void)1415inti;/*1-100*/1617/*createclientDatawithdefaultinformation*/18structclientDatablankClient=0,“”,“”,0.0;,49,第11章文件处理,11.7随机存取文件的创建图11.11程序:创建随机存取文件1920FILE*cfPtr;2122/*fopenopensfile.Exitprogramifunabletocreatefile*/23if(cfPtr=fopen(“credit.dat”,“wb”)=NULL),50,第11章文件处理,11.7随机存取文件的创建图11.11程序:创建随机存取文件24printf(“Filecouldnotbeopenedn”);25/*endif*/26else27/*output100blankrecordstofile*/28for(i=1;i=100;i+),51,第11章文件处理,11.7随机存取文件的创建图11.11程序:创建随机存取文件29fwrite(33/*endelse*/,52,第11章文件处理,11.7随机存取文件的创建图11.11程序:创建随机存取文件3435return0;36/*endmain*/,53,第11章文件处理,11.7随机存取文件的创建图11.11程序执行结果在当前目录下生成文件:credit.dat,54,第11章文件处理,11.8随机向一个随机存取文件中写入数据图11.12程序:向随机存取文件写入数据1/*Fig.11.12:fig11.12.c2Writingtoarandom-accessfile*/3#include45/*clientDatastructuredefinition*/,55,第11章文件处理,11.8随机向一个随机存取文件中写入数据图11.12程序:向随机存取文件写入数据6structclientData7intacctNum;8charlastName15;9charfirstName11;10doublebalance;11;/*endstructureclientData*/12,56,第11章文件处理,11.8随机向一个随机存取文件中写入数据图11.12程序:向随机存取文件写入数据13intmain(void)1415FILE*cfPtr;1617/*createclientDatawithdefaultinformation*/18structclientDatablankClient=0,“”,“”,0.0;,57,第11章文件处理,11.8随机向一个随机存取文件中写入数据图11.12程序:向随机存取文件写入数据1920/*fopenopensthefile;Exitsiffileconnotbeopened*/21if(cfPtr=fopen(“credit.dat”,“rb+”)=NULL)22printf(“Filecouldnotbeopenedn”);23/*endif*/,58,第11章文件处理,11.8随机向一个随机存取文件中写入数据图11.12程序:向随机存取文件写入数据24else25/*retuireusertospecifyaccountnumber*/26printf(“Enteraccountnumber”27“(1to100,0toendinput)n?“);28scanf(“%d”,29,59,第11章文件处理,11.8随机向一个随机存取文件中写入数据图11.12程序:向随机存取文件写入数据30/*userentersinformation,whichiscopiedintofile*/31while(client.acctNum!=0)32/*userenterslastname,firstname,balance*/33printf(“Enterlastname,firstname,balancen?“);,60,第11章文件处理,11.8随机向一个随机存取文件中写入数据图11.12程序:向随机存取文件写入数据3435/*setrecordlastName,firstNameandbalance*/36fscanf(stdin,“%s%s%lf”,client.lastName,37client.firstName,38,61,第11章文件处理,11.8随机向一个随机存取文件中写入数据图11.12程序:向随机存取文件写入数据39/*seekpositioninfiletouserspecifiedrecord*/40fseek(cfPtr,(client.acctNum-1)*41sizeof(structclientData),SEEK_SET);42,62,第11章文件处理,11.8随机向一个随机存取文件中写入数据图11.12程序:向随机存取文件写入数据43/*writeuser-specifiedinformationinfile*/44fwrite(4546/*enableusertoinputanotheraccountnumber*/,63,第11章文件处理,11.8随机向一个随机存取文件中写入数据图11.12程序:向随机存取文件写入数据47printf(“Enteraccountnumbern?“);48scanf(“%d”,52/*endelse*/,64,第11章文件处理,11.8随机向一个随机存取文件中写入数据图11.12程序:向随机存取文件写入数据5354return0;55/*endmain*/,65,第11章文件处理,11.8随机向一个随机存取文件中写入数据图11.12程序执行结果,66,第11章文件处理,11.9从一个随机存取文件中读取数据fread函数:将特定数目的字节从一个文件中读入内存fread(,67,第11章文件处理,11.9从一个随机存取文件中读取数据图11.15程序:从随机存取文件读取数据1/*Fig.11.15:fig11.15.c2Readingarandom-accessfilesequentially*/3#include45/*clientDatastructuredefinition*/,68,第11章文件处理,11.9从一个随机存取文件中读取数据图11.15程序:从随机存取文件读取数据6structclientData7intacctNum;8charlastName15;9charfirstName11;10doublebalance;11;/*endstructureclientData*/12,69,第11章文件处理,11.9从一个随机存取文件中读取数据图11.15程序:从随机存取文件读取数据13intmain(void)1415FILE*cfPtr;1617/*createclientDatawithdefaultinformation*/18structclientDatablankClient=0,“”,“”,0.0;,70,第11章文件处理,11.9从一个随机存取文件中读取数据图11.15程序:从随机存取文件读取数据1920/*fopenopensthefile;Exitsiffileconnotbeopened*/21if(cfPtr=fopen(“credit.dat”,“rb”)=NULL)22printf(“Filecouldnotbeopenedn”);23/*endif*/,71,第11章文件处理,11.9从一个随机存取文件中读取数据图11.15程序:从随机存取文件读取数据24else25printf(“%-6s%-16s%-11s%10sn”,“Acct”,26“LastName”,“FirstName”,“Balance”);2728/*readallrecordsfromfile(untileof)*/,72,第11章文件处理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论