




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,1,.,2,1、数据的层次结构2、文件概述3、文件的打开和关闭4、位置指针与文件定位5、文件的读写操作6、顺序文件的操作7、随机文件的操作,提纲,.,3,文件的打开:FILE*fopen(constchar*filename,constchar*mode);文件的关闭:intfclose(FILE*stream);,.,4,打开文件表,fd,buffer,FCBforclient.dat,8,0,1,8,client.dat,打开文件的操作:1、创建FILE类型记录;2、创建缓冲区;3、将缓冲区首地址、文件控制块(FCB)在打开文件表中的下标写入FILE记录,见教材346页,.,5,1、数据的层次结构2、文件概述3、文件的打开和关闭4、位置指针与文件定位5、文件的读写操作6、顺序文件的操作7、随机文件的操作,提纲,.,6,文件位置指针的概念不是真正的指针,而是指向下一次读写操作所在字节的整数值。每次读写1个(或1组)数据后,系统自动将文件位置指针移动到下一个读写位置上。3个文件位置指针相关函数:位置指针复位函数intrewind(FILE*stream);位置指针移动函数intfseek(FILE*stream,位移量,参照点);返回文件位置指针当前位置函数longftell(FILE*stream);,.,7,1、数据的层次结构2、文件概述3、文件的打开和关闭4、位置指针与文件定位5、文件的读写操作6、顺序文件的操作7、随机文件的操作,提纲,.,8,11.5文件的读写操作,12.3.1读写文件中的一个字符(文本文件)fputc和fgetc12.3.2读写一个字符串(文本文件)fputs和fgets12.3.3对文件进行格式化读写(文本文件)fscanf和fprintf12.3.4读写一个数据块(二进制文件)fread和fwrite,.,9,二、读写一个字符串fgets()和fputs(),1、库函数fputs()向指定文件输出一个字符串1)用法:intfputs(constchar*s,FILE*stream);2)功能:将s所指向的字符串写入stream所指向的流中(0不被写入),同时将文件位置指针向前移动字符串长度个字节,指向下一写入位置。如果发生写错误,则函数返回EOF;否则,返回一个非负值。,fputs(s,stdout)等价于puts(s),将s所指向的字符串写入到标准输出流。,.,10,2、库函数fgets()从文件中读一个字符串1)用法:char*fgets(char*s,intn,FILE*stream);2)功能:从stream指向的流中读取最多n1个字符并放到s所指向的数组中,读到新行符(n)或者文件结束符后不再向后读。最后一个字符读入数组后接着写入结束标志0,并将文件位置指针向前移动n1(字符串长度)个字节。如果遇到文件结束符并且没有字符读入数组,则数组内容不变。详见书上467页。,二、读写一个字符串fgets()和fputs(),.,11,#includemain()chars15,chars2100;FILE*fPtr;if(fPtr=fopen(client.dat,r)=NULL)printf(openfileerrorn);elsefgets(s1,5,fPtr);printf(%s,s1);rewind(fPtr);fgets(s2,100,fPtr);printf(%s,s2);fclose(fPtr);system(pause);,Wherethereislife,Thereishope.,data.txt,WherWherethereislife,请按任意键继续.,.,12,voidcopyFile(char*sourceFileName,char*destFileName)chars100;FILE*sourcefPtr,*destfPtr;if(sourcefPtr=fopen(sourceFileName,r)=NULL)printf(cantopenthesourcefilen);elseif(destfPtr=fopen(destFileName,w)=NULL)printf(cantopenthedestfilen);elsefgets(s,sizeof(s),sourcefPtr);/从源文件读取一行字符到数组swhile(!feof(sourcefPtr)/包括换行符fputs(s,destfPtr);/将s中的字符串写入文件中fgets(s,sizeof(s),sourcefPtr);fclose(sourcefPtr);fclose(destfPtr);,例4设计函数:将一个文本文件逐行赋制到另一文本文件中。,.,13,二、读写一个字符串fgets()和fputs(),思考fgets(s,sizeof(s),stdin);while(!feof(stdin)fputs(s,stdout);fgets(s,sizeof(s),stdin);将以上语句改写成以下语句会发现最后一个字符串会输出两次!为什么?while(!feof(stdin)fgets(s,sizeof(s),stdin);fputs(s,stdout);,ThisisanexampleZ,ThisisanexampleThisisanexample,输入:,输出:,1.只有当读取了文件结束符后,feof才返回1。2.fgets如果遇到文件结束符并且没有字符读入数组,则数组内容不变,.,14,1、intfscanf(FILE*stream,constchar*format,输入变量首地址表);/*读文件*/从stream指向的流中读取字符序列,按照format中的格式规格说明对字符序列进行解释,并把结果存储在变量中。如:fscanf(fPtr,%d,%f,三、对文件进行格式化读写fscanf()和fprintf()函数,25,10.34,intfscanf(stdin,constchar*format,输入变量首地址表);等价于intscanf(constchar*format,输入变量首地址表);,.,15,2、intfprintf(FILE*stream,constchar*format,输出参量表);/*写文件*/例如,.inti=3;floatf=9.80;fprintf(fPtr,%2d,%6.2f,i,f);.fprintf()函数的作用是,将变量i按%2d格式、变量f按%6.2f格式,以逗号作分隔符,输出到fPtr所指向的文件中:3,9.80(表示1个空格)。printf(constchar*format,输出变量首地址表)等价于fprintf(stdout,constchar*format,输出变量首地址表),三、对文件进行格式化读写fscanf()和fprintf()函数,.,16,四、读写一个数据块fread()和fwrite(),intfwrite(void*buffer,intsize,intcount,FILE*stream);fwrite()将buffer所指向的数组的内容写入stream所指向的流中。size表示数组元素大小,最多写入count个数组元素。流的文件位置指针根据成功写入的字符数递增。函数返回成功写入的元素个数,如果遇到写错误,返回值可能小于count。,.,17,四、读写一个数据块fread()和fwrite(),intfwrite(void*buffer,intsize,intcount,FILE*stream);structstudentstu3,aStu;/把数组stu中所有元素一次性写入文件中fwrite(stu,sizeof(structstudent),3,stream);/把变量aStu中内容写入文件中fwrite(,.,18,四、读写一个数据块fread()和fwrite(),intfread(void*buffer,intsize,intcount,FILE*stream);从stream所指向的流中读取数据到buffer所指向的数组中,size表示数组元素大小,最多读取count个数组元素,流的文件位置指针根据成功写入的字符数递增。函数返回成功读入的元素个数。如果发生读错误,则返回值可能小于count。,.,19,四、读写一个数据块fread()和fwrite(),intfread(void*buffer,intsize,intcount,FILE*stream);structstudentstu3,aStu;/从文件读取3条记录写入数组stu中fread(stu,sizeof(structstudent),3,stream);/一条记录写入结构变量aStu中fread(,.,20,1、数据的层次结构2、文件概述3、文件的打开和关闭4、位置指针与文件定位5、文件的读写操作6、顺序文件的操作7、随机文件的操作,提纲,.,21,两种选择:使用顺序文件或者随机文件,.,22,顺序存取文件特点:文件中的记录可以有不同的长度。新的记录只能插入到文件尾。不能直接快速地访问文件中的某一记录,而必须从文件中第一个记录开始访问。使用fscanf和fprintf函数(顺序文件是ASCII码文件),11.6顺序存取文件的操作,.,23,随机存取文件特点:记录通常具有相同的长度。新记录可以插入到希望的位置。能够直接快速地定位、访问文件中的某一记录。使用fread和fwrite函数(随机文件是二进制文件),.,24,例5设计函数,将键盘上输入若干记录(以Ctrl+Z结束),存储到指定顺序文件中,voidwriteFileFromKeyboard(char*filename)intaccount;charname30;floatbalance;FILE*fPtr=NULL;if(fPtr=fopen(filename,w)!=NULL)/打开文件scanf(%d%s%f,/*关闭文件*/endofif,注意:将一个记录写入文件1时,必须将n作为记录结束符写入文件1,否则从文件1中读取记录时最后一个记录无法读取!,.,25,按书上11-3将使得程序11-5无法正确运行fprintf(destfPtr,%d%s%.2fn,account,name,balance);改成:fprintf(cfPtr,%5d%13s%10.2fn,account,name,balance);即可,.,26,例6设计函数:将一顺序文件逐记录赋制到另一顺序文件中。,voidcopyFile(char*sourceFileName,char*destFileName)intaccount;charname30;floatbalance;FILE*sourcefPtr,*destfPtr;if(sourcefPtr=fopen(sourceFileName,r)=NULL)printf(cantopenthesourcefilen);elseif(destfPtr=fopen(destFileName,w)=NULL)printf(cantopenthedestfilen);,.,27,else/从源文件中读取一条记录fscanf(sourcefPtr,%d%s%f,.,28,1、数据的层次结构2、文件概述3、文件的打开和关闭4、位置指针与文件定位5、文件的读写操作6、顺序文件的操作7、随机文件的操作,提纲,.,29,一、随机存取文件特点:记录通常具有相同的长度。能够直接快速地访问文件中的某一记录。为了能在文件中不同的位置随机写入记录,必须对文件先初始化,根据要写入的总记录数占据字节数。,11.7随机存取文件的操作,.,30,二、按顺序建立一个随机存取文件(文件初始化),11.7随机存取文件的操作,#includestructclientDataintacctNum;charlastName15;charfirstName10;floatbalance;,.,31,main()inti;structclientDatablankClient=0,0.0;FILE*cfPtr;if(cfPtr=fopen(client.dat,w)=NULL)/*打开文件*/printf(Filecouldnotbeopenedn);elsefor(i=1;i=2;i+)fwrite(,因为用fwrite函数,所以创建的是二进制文件,.,32,三、把数据随机地写入随机存取文件,11.7随机存取文件的操作,main()structclientDataclient;FILE*cfPtr;if(cfPtr=fopen(“client.dat”,“r+)=NULL)printf(Filecouldnotbeopenedn);,思考:文件打开模式设为“w”可以否?,.,33,elseprintf(Enteraccountnumber(1to100,0toendinput)n);scanf(%d,.,34,四、按顺序读取一个随机存取文件,11.7随机存取文件的操作,main()structclientDataclient;FILE*cfPtr;if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年变态的iq测试题及答案
- 2025年复杂环境停车测试题及答案
- 2025年兽医职业考试题型及答案
- 2025年注塑技工考试试题及答案
- 2025年重大机械面试题及答案
- 2025年发展民宿面试题及答案
- 2025年管理班级的面试题及答案
- 2025年金融类面试题及答案
- 2025年专利级别考试试题及答案
- 2025年概率论期末试题及答案
- 如何发现肾脏病
- 第三单元 音乐与民族-说唱 课件-2024-2025学年高中音乐粤教花城版(2019)必修音乐鉴赏
- 数字艺术微喷印画产业深度调研及未来发展现状趋势
- 2024-2030年中国菜籽油行业供需趋势及投资潜力分析报告权威版
- 黑龙江省哈尔滨工业大学附属中学2024-2025学年八年级上学期期中考试地理试题(含答案)
- GB/T 44537-2024精细陶瓷室温断裂韧性试验方法表面裂纹弯曲梁(SCF)法
- 输变电工程施工质量验收统一表式(电缆工程土建专业)
- JJF(京) 124-2024 智能电表电动自行车充电辨识模组校准规范
- 2024年新课标《义务教育数学课程标准》测试题(附含答案)
- 部编版八年级道德与法治下册2.1《坚持依宪治国》精美教案
- GB/T 44208-2024馆藏文物病害描述及图示基础要素
评论
0/150
提交评论