c语言程序设计现代方法.pptx
《c语言程序设计现代方法.pptx》由会员分享,可在线阅读,更多相关《c语言程序设计现代方法.pptx(21页珍藏版)》请在咨信网上搜索。
第22章 文件n文件基本概念文件基本概念n文件打开与关闭文件打开与关闭n文件读写文件读写1 C文件概述文件概述n文件:存储在外部介质上数据的集合,是操作系统数据管理的单位。使用数据文件的目的:使用数据文件的目的:1、数据文件的改动不引起程序的改动、数据文件的改动不引起程序的改动程序与程序与 数据分离;数据分离;2、不同程序可以访问同一数据文件中的数据、不同程序可以访问同一数据文件中的数据数据共享;数据共享;3、能、能长期保存长期保存程序运行的中间数据或结果数据。程序运行的中间数据或结果数据。文件分类n按文件的逻辑结构:按文件的逻辑结构:n记录文件:由具有一定结构的记录组成(定长和不定记录文件:由具有一定结构的记录组成(定长和不定长)长)n流式文件流式文件:由一个个字符(字节)数据顺序组成:由一个个字符(字节)数据顺序组成n按存储介质:按存储介质:n普通文件:存储介质文件(磁盘、磁带等)普通文件:存储介质文件(磁盘、磁带等)n设备文件设备文件:非存储介质(键盘、显示器、打印机等):非存储介质(键盘、显示器、打印机等)n按数据的组织形式:按数据的组织形式:n文本文件文本文件:ASCII文件,每个字节存放一个字符的文件,每个字节存放一个字符的ASCII码码n二进制文件二进制文件:数据按其在内存中的存储形式原样存放:数据按其在内存中的存储形式原样存放 EOF文件的结束符文件的结束符:C语言中规定的标准文件有三个:语言中规定的标准文件有三个:标准输入文件(键盘标准输入文件(键盘),文件指针为),文件指针为stdin;标准输出文件(显示屏幕),文件指针为标准输出文件(显示屏幕),文件指针为stdout;标准出错输出文件,文件指针为标准出错输出文件,文件指针为stderr。C语言中的文件为语言中的文件为流式文件流式文件一个字节流或二进制流。一个字节流或二进制流。文件的读写是按顺序进行的,以字符(字节)为单位。文件的读写是按顺序进行的,以字符(字节)为单位。这些文件在操作前或后,系统会这些文件在操作前或后,系统会自动自动将其打开或关闭,编程时不需管。将其打开或关闭,编程时不需管。如:如:int型数型数100000010011100010000内存存储形式内存存储形式0010011100010000二进制形式二进制形式0011000100110000001100000011000000110000ASCII形式形式文本文件特点:存储量大、速度慢、便于对字符操作二进制文件特点:存储量小、速度快、便于存放中间结果,可节省外存空间和转换时间但不能直接输出字符 文件处理方法文件处理方法n缓冲文件系统:高级文件系统,系统自动为正在使缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区用的文件开辟内存缓冲区n非缓冲文件系统:低级文件系统,由用户在程序中非缓冲文件系统:低级文件系统,由用户在程序中为每个文件设定缓冲区为每个文件设定缓冲区磁盘文件磁盘文件输出文件缓冲区输出文件缓冲区输入文件缓冲区输入文件缓冲区程序数据区程序数据区a缓冲文件系统:缓冲文件系统:缓冲区缓冲区指令区指令区程序程序用户数据区用户数据区磁盘磁盘非缓冲文件系统:非缓冲文件系统:2 文件类型指针文件类型指针n文件结构文件结构FILEn 缓冲文件系统为每个正使用的文件在内存开辟文件缓冲文件系统为每个正使用的文件在内存开辟文件信息区信息区n文件信息用系统定义的名为文件信息用系统定义的名为FILE的结构描述的结构描述nFILE定义在定义在stdio.h中中typedef struct int _fd;/*文件号文件号*/int _cleft;/*缓冲区中剩下的字符数缓冲区中剩下的字符数*/int _mode;/*文件操作方式文件操作方式*/char *_next;/*文件当前读写位置文件当前读写位置*/char *_buff;/*文件缓冲区位置文件缓冲区位置*/FILE;n文件类型指针文件类型指针n指针变量说明:指针变量说明:FILE *fp;n用法:用法:n文件打开文件打开时,系统时,系统自动自动建立文件结构,并把指向它的指针返建立文件结构,并把指向它的指针返回来,程序通过这个指针获得回来,程序通过这个指针获得文件信息文件信息,访问文件,访问文件n文件关闭文件关闭后,它的文件结构被释放后,它的文件结构被释放文件名文件名文件使用文件使用方式方式文件类型指针文件类型指针C程序程序操作系统操作系统磁盘磁盘3 文件的打开与关闭文件的打开与关闭v一般文件:操作前需一般文件:操作前需打开打开,操作后需,操作后需关闭关闭。打开和关。打开和关闭均是通过闭均是通过库函数库函数进行的。进行的。v打开文件打开文件就是要在内存中建立缓冲区,如打开成功,就是要在内存中建立缓冲区,如打开成功,打开函数返回一个内存地址值,由一个文件指针接收。打开函数返回一个内存地址值,由一个文件指针接收。以后的操作使用这个指针。若内存不可建立缓冲区,以后的操作使用这个指针。若内存不可建立缓冲区,则打开失败,打开函数返回则打开失败,打开函数返回NULL。v关闭文件关闭文件很重要,是要将文件送回磁盘,并从内存中很重要,是要将文件送回磁盘,并从内存中清除。及时释放内存空间,并可保证文件安全。清除。及时释放内存空间,并可保证文件安全。v文件使用方式:文件使用方式:打开文件打开文件-文件读文件读/写写-关闭文件关闭文件n打开文件打开文件fopenn函数原型:函数原型:FILE *fopen(char*name,char*mode);n功能:按指定方式打开文件功能:按指定方式打开文件n返值:正常打开,为指向文件结构的指针;打开失败,返值:正常打开,为指向文件结构的指针;打开失败,为为NULL要打开的文件名要打开的文件名使用文件方式使用文件方式例例 FILE *fp;fp=fopen(“c:pytest.dat”,”r”);例例 FILE *fp;char *filename=“c:pytest.dat”fp=fopen(filename,”r”);“r+/rb+”(读写读写)“a/ab”(追加追加)“w/wb”(只写只写)“r/rb”(只读只读)“w+/wb+”(读写读写)“a+/ab+”(读写读写)为为输入输入打开一个文本打开一个文本/二进制文件二进制文件为为输出输出打开或建立一个文本打开或建立一个文本/二进制文件二进制文件为读为读/写打开一个文本写打开一个文本/二进制文件二进制文件为读为读/写建立一个文本写建立一个文本/二进制文件二进制文件为读为读/写打开或建立一个文本写打开或建立一个文本/二进制文件二进制文件向文本向文本/二进制文件尾二进制文件尾追加追加数据数据文件使用方式文件使用方式含义含义n文件关闭文件关闭fclosen函数原型:函数原型:int fclose(FILE *fp);n功能:关闭功能:关闭fp指向的文件,指向的文件,使文件指针变量与文件使文件指针变量与文件“脱脱钩钩”,释放文件结构占用的内存空间,释放文件结构占用的内存空间n返值:正常关闭为返值:正常关闭为0;出错时出错时,非非0文件打开时返回的文件指针文件打开时返回的文件指针磁盘文件磁盘文件输出文件缓冲区输出文件缓冲区输入文件缓冲区输入文件缓冲区程序数据区程序数据区a缓冲文件系统:缓冲文件系统:fclose不关闭文件可能会不关闭文件可能会丢失数据丢失数据4 文件的读写文件的读写n字符字符I/O:fputc与与fgetcnfputcn函数原型:函数原型:int fputc(char c,FILE*fp);n功能:把一字节代码功能:把一字节代码c写入写入fp指向的文件中指向的文件中n返值:正常,返回返值:正常,返回c;出错,返回非出错,返回非0nfgetcn函数原型:函数原型:int fgetc(FILE*fp);n功能:从功能:从fp指向的文件中读取指向的文件中读取一字节代码一字节代码n返值:正常,返回读到的字符;读到文件尾或出返值:正常,返回读到的字符;读到文件尾或出错,为错,为EOF例:从键盘输入字符,例:从键盘输入字符,逐个存到磁盘文件中,逐个存到磁盘文件中,直到输入直到输入#“为止。为止。#include main()FILE*fp;char ch,*filename=“out.txt”;if(fp=fopen(filename,w)=NULL)printf(cannot open filen);exit(0);printf(Please input string:);ch=getchar();while(ch!=#)fputc(ch,fp);putchar(ch);ch=getchar();fclose(fp);例:读文本文件内容,例:读文本文件内容,并显示。并显示。#include main()FILE*fp;char ch,*filename=“out.txt”;if(fp=fopen(filename,”r)=NULL)printf(cannot open filen);exit(0);while(ch=fgetc(fp)!=EOF)putchar(ch);fclose(fp);判断判断文本文件文本文件是否结束是否结束例:使用文件处理函数,以及命令行参数,实现拷贝任何类例:使用文件处理函数,以及命令行参数,实现拷贝任何类型的文件。型的文件。#include main(int argc,char*argv)FILE*in,*out;char ch;if(argc!=3)printf(”Usage:source filename and target filename”);exit(1);if(in=fopen(argv1,”rb”)=NULL)printf(”Can not open source filen”);exit(1);if(out=fopen(argv2,”wb”)=NULL)printf(”Can not open target filen”);exit(1);while(!feof(in)/*This code actually copies the file*/ch=fgetc(in);fputc(ch,out);fclose(in);fclose(out);运行运行:c:test ctemp newfile n字符串字符串I/O:fgets与与fputsn函数原型:函数原型:char *fgets(char*s,int n,FILE*fp);int fputs(char *s,FILE *fp);n功能:从功能:从fp指向的文件读指向的文件读/写一个字符串写一个字符串n返值:返值:nfgets正常时返回读取字符串的首地址;出错或文件尾,正常时返回读取字符串的首地址;出错或文件尾,返回返回NULLnfputs正常时返回正常时返回0;出错返回非;出错返回非0nfeofn函数原型:函数原型:int feof(FILE *fp);n功能:判断文件是否结束功能:判断文件是否结束n返值:文件结束,返回真(非返值:文件结束,返回真(非0);文件未);文件未结束,返回结束,返回0n数据块数据块I/O:fread与与fwriten函数原型:函数原型:size_t fread(void*buffer,size_t size,size_t count,FILE *fp);size_t fwrite(void*buffer,size_t size,size_t count,FILE *fp);n功能:读功能:读/写数据块。成功,返回读写数据块。成功,返回读/写的块数;出错或写的块数;出错或文件尾,返回文件尾,返回0n说明:说明:ntypedef unsigned size_t;nbuffer:指向要输入指向要输入/输出数据块的首地址的指针输出数据块的首地址的指针nsize:每个要读每个要读/写的数据块的大小(字节数)写的数据块的大小(字节数)ncount:要读要读/写的数据块的个数写的数据块的个数nfp:要读要读/写的文件指针写的文件指针nfread与与fwrite 一般用于一般用于二进制文件二进制文件的输入的输入/输出输出例:从键盘输入例:从键盘输入4个学生数据,先转存到磁盘文件再读出显示个学生数据,先转存到磁盘文件再读出显示#include#define SIZE 4struct student_type char name10;int num;int age;char addr15;studSIZE;main()int i;for(i=0;iSIZE;i+)scanf(%s%d%d%s,studi.name,&studi.num,&studi.age,studi.addr);save();display();void save()FILE*fp;int i;if(fp=fopen(d:pystu_dat,wb)=NULL)printf(cannot open filen);return;for(i=0;iSIZE;i+)if(fwrite(&studi,sizeof(struct student_type),1,fp)!=1)printf(file write errorn);fclose(fp);void display()FILE*fp;int i;if(fp=fopen(d:pystu_dat,rb)=NULL)printf(cannot open filen);return;for(i=0;iSIZE;i+)fread(&studi,sizeof(struct student_type),1,fp);printf(%-10s%4d%4d%-15sn,studi.name,studi.num,studi.age,studi.addr);fclose(fp);n格式化格式化I/O:fprintf与与fscanfn函数原型:函数原型:int fprintf(FILE*fp,const char*format,argument,);int fscanf(FILE*fp,const char*format,address,);n功能:按格式对文件进行功能:按格式对文件进行I/O操作操作n返值:成功,返回返值:成功,返回I/O的个数;的个数;出错或文件尾,返回出错或文件尾,返回EOF。例:例:fprintf(fp,“%d,%6.2f”,i,t);/*将将i和和t按按%d,%6.2f格式输出到格式输出到fp文件文件*/fscanf(fp,“%d,%f”,&i,&t);/*若文件中有若文件中有3,4.5,则将则将3送入送入i,4.5送入送入t*/例:从键盘例:从键盘按格式输入按格式输入数据存到磁数据存到磁盘文件中,盘文件中,从磁盘文件从磁盘文件按格式输入按格式输入数据并显示。数据并显示。#include main()char s80,c80;int a,b;FILE*fp;if(fp=fopen(test,w)=NULL)puts(cant open file);exit;fscanf(stdin,%s%d,s,&a);/*read fromkeyboard*/fprintf(fp,%s%d,s,a);/*write to file*/fclose(fp);if(fp=fopen(test,r)=NULL)puts(cant open file);exit;fscanf(fp,%s%d,c,&b);/*read from file*/fprintf(stdout,%s%d,c,b);/*print to screen*/fclose(fp);9.5 其他文件操作函数其他文件操作函数n文件位置指针文件位置指针-指向当前读写位置的指针指向当前读写位置的指针n读写方式读写方式n顺序读写:位置指针按字节位置顺序移动顺序读写:位置指针按字节位置顺序移动n随机读写:位置指针按需要移动到任意位置随机读写:位置指针按需要移动到任意位置nrewind函数函数n函数原型:函数原型:void rewind(FILE *fp);n功能:重置文件位置指针到文件开头功能:重置文件位置指针到文件开头n返值:无返值:无nfseek函数函数n函数原型:函数原型:int fseek(FILE*fp,long offset,int whence);n功能:改变文件位置指针的位置功能:改变文件位置指针的位置n返值:成功,返回返值:成功,返回0;失败,返回非;失败,返回非0值。值。nferror函数函数n函数原型:函数原型:int ferror(FILE *fp);n功能:测试文件操作是否出现错误功能:测试文件操作是否出现错误n返值:未出错,返值:未出错,0;出错,非;出错,非0小结小结n系统把文件当作一个系统把文件当作一个“流流”,按字节进行处理。,按字节进行处理。n文件按编码方式分为二进制文件和文件按编码方式分为二进制文件和ASCII文件。文件。n语言中,用文件指针标识文件,当一个文件被语言中,用文件指针标识文件,当一个文件被 打开时,打开时,取得该文件指针。取得该文件指针。n文件在读写之前必须打开,读写结束必须关闭。文件在读写之前必须打开,读写结束必须关闭。n文件可按只读、只写、读写、追加四种操作方式打开,文件可按只读、只写、读写、追加四种操作方式打开,同时还必须指定文件的类型是二进制文件还是文本文件。同时还必须指定文件的类型是二进制文件还是文本文件。n文件可按字节,字符串,数据块为单位读写,文件也可文件可按字节,字符串,数据块为单位读写,文件也可按指定的格式进行读写。按指定的格式进行读写。n文件内部的位置指针可指示当前的读写位置,移动该指文件内部的位置指针可指示当前的读写位置,移动该指针可以对文件实现随机读写。针可以对文件实现随机读写。- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 现代 方法
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文