第8章-文件操作-2课时课件

上传人:风*** 文档编号:242749442 上传时间:2024-09-02 格式:PPT 页数:53 大小:2.29MB
返回 下载 相关 举报
第8章-文件操作-2课时课件_第1页
第1页 / 共53页
第8章-文件操作-2课时课件_第2页
第2页 / 共53页
第8章-文件操作-2课时课件_第3页
第3页 / 共53页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,语言程序设计,C,C语言程序设计,信息与电气工程学院,2012年5月,CDIO.,C语言程序设计 信息与电气工程学院CDIO.,1,第八章 文件操作工资管理系统之数据永久记录,任务一 学习目标,任务二 了解文件,任务三 了解文件的存储形式,任务四 了解对文件的操作,任务五 打开文件fopen,任务六 将职工工资数据写入文件fwrite 函数的应用,第八章 文件操作工资管理系统之数据永久记录任务一,2,任务七 从文件中读取职工工资数据fread 函数的应用,任务八 关闭文件fclose 函数的应用,任务九 更多的读写文件函数,任务十 了解文件数据的定位,任务十一 知识扩展,任务十二 精选案例,任务十三 本章要点汇总,任务十四 实力检验,任务七 从文件中读取职工工资数据fread 函数的应用,3,任务一 学习目标,1、本章主要任务就是解决数据的保存问题;,2、数据的保存涉及文件的概念和操作;,3、如何通过语言代码加以实现,需要深入学习文件的相关知识。,任务一 学习目标1、本章主要任务就是解决数据的保存问题;,4,任务二 了解文件,1、“文件”:是指存放在外存储器上的各类信息的有序集合;,2、按照不同的标准,可以将文件进行分类;,3、文件操作主要指对文件的建立、删除、读取、写入等操作。,任务二 了解文件1、“文件”:是指存放在外存储器上的各类信,5,任务三 了解文件的存储形式,1、根据文件内数据组织形式的不同,可以将数据文件分为文本文件和二进制文件;,2、文本文件记录的是字符信息,其中每一个字节存放一个 ASCII 代码,表示一个字符,如字母、数字、标点符号等。而二进制文件则是将数据按其在内存中的原始存储形式,直接输出到磁盘上,即文件的内容就是内存的直接映像;,3、二进制文件居多。,任务三 了解文件的存储形式1、根据文件内数据组织形式的不同,6,任务四 了解对文件的操作,打开文件、读文件、写文件、关闭文件等,任务四 了解对文件的操作打开文件、读文件、写文件、关闭文件,7,任务五 打开文件fopen,ANSI C 规定了标准输入/输出函数库stdio.h中的 fopen 函数,用来实现打开文件的操作。其调用方式通常为:,FILE *fp;,/*fp为文件指针变量标识符,由程序设计人员命名*/,fp=fopen(文件名,文件打开方式);,例如:打开工资管理系统中的职工工资数据文件gz.dat,FILE *file;,file=fopen(gz.dat,rb“);,/*rb表示以只读方式打开二进制文件 gz.dat */,FILE是一个结构,每个被打开使用的文件都会在内存中开辟一个区域,用于存放该文件的有关信息,诸如文件的名字、状态和当前位置等,此处是需要打开的文件,以字符串形式表达,如果包含路径,应该如何表达呢?,此处是打开文件的方式,具体请看教材P243,任务五 打开文件fopen ANSI C 规定了标,8,方式,含义,r,只读,以读方式打开文本文件,w,只写,以写方式创建文本文件,原文件存在则删除后创建,文件不存在则直接创建,a,追加,以追加方式打开文本文件,只允许在文件尾写入,rb,只读,以读方式打开二进制文件,wb,只写,以写方式创建二进制文件,原文件存在则删除后创建,文件不存在则直接创建,ab,追加,以追加方式打开二进制文件,只允许在文件尾写入,r+,读写,以读写方式打开文本文件,可读可写,w+,读写,以读写方式创建文本文件,原文件存在则删除后创建,文件不存在则直接创建,a+,读写,以读写方式打开文本文件,允许读,亦允许在文件末写入,rb+,读写,以读写方式打开二进制文件,允许读,亦允许写,wb+,读写,以读写方式创建二进制文件,原文件存在则删除后创建,文件不存在则直接创建,ab+,读写,以读写方式打开二进制文件,允许读,亦允许在文件末写入,看书吧!,P243,方式含义r只读以读方式打开文本文件w只写以写方式创建,9,应用中,if(,(file=,fopen(gz.dat,wb),),!=NULL),/*判断打开成功*/,/*成功后的处理*/,fwrite(,/*所有记录一次写入文件*/,fclose(file);,/*关闭文件*/,printf(记录保存完毕! n);,或者:,if(,(file=,fopen(gz.dat,wb),)=NULL),/*判断打开失败*/,printf(文件打开失败);,应用中 if(file=fopen(gz.dat,w,10,任务六 将职工工资数据写入文件fwrite 函数的应用,能够将数据写入文件的,C,语言标准函数有很多,在实际的软件开发过程中,较常用的是,fwrite(),函数。,原,型:,size_t fwrite(const void *buf,size_t size,size_t count,FILE *stream),功 能:,从内存地址,buf,处开始,将,count,个,size,大小的数据写入文件,stream,中。,返回值:,成功写入的实际数据块个数。,头文件:,stdio.h,说 明:,相关函数参见任务七中的fread()函数。,任务六 将职工工资数据写入文件fwrite 函数的应用,11,应用中-,以下是“职工工资管理系统”中的一个自定义函数,应用中-以下是“职工工资管理系统”中的一个自定义函数,12,任务七 从文件中读取职工工资数据fread 函数的应用,能够从文件中读取数据的,C,语言标准函数同样有很多,在实际的软件开发过程中,较常,用的是,fread( ),函数。,原 型:,size_t fread(void *buf, size_t size, size_t count, FILE *stream),功 能:,从 stream 指示的文件中,读取 count 个 size 大小的数据,放入内存地址 buf处。,返回值:,成功读取的数据块个数。,头文件:,stdio.h,任务七 从文件中读取职工工资数据fread 函数的应用,13,应用中-,以下是 “工资管理系统” 中的一个自定义函数, 其功能是实现将职工工资信息从文件gz.dat读入内存,并存放于结构数组 zggz100中。,应用中-以下是 “工资管理系统” 中的一个自定义函数, 其,14,任务八 关闭文件fclose 函数的应用,程序对指定文件进行读写操作完成后,必须“,关闭,”该文件。尤其是写操作,因为,在缓冲文件系统中,写操作的直接目标是内存缓冲区,而不是磁盘,“关闭”文件就是将内存缓冲区中的内容写入到磁盘文件中,所以,只有执行了“关闭”操作,才能保证文件内容的完整性。,任务八 关闭文件fclose 函数的应用程序对指定,15,fclose( )函数说明,原型:,int fclose(FILE *stream),功能:,关闭文件指针。关闭前清除所有与stream相关联的缓冲区,释放系统分配的缓冲区。,返回值:,成功时返回0;失败时返回EOF,头文件:,stdio.h,说明:,EOF意为end-of-file,是C内部宏定义:,#define EOF -1,对文本文件读操作时,经常以此判断是否文件读取完毕。,fclose( )函数说明,16,任务九 更多的读写文件函数,1.字符读写函数fgetc( )和fputc( ),fgetc( )函数说明,原型:,int fgetc(FILE *stream),功能:,从指针,stream,指定的文件中读取一个字符,返回值:,成功时返回所读字符;当遇到文件结束符,EOF,时,返回-1,头文件:,stdio.h,说明:,相关函数参见第三章任务六中的,getchar( ),函数,任务九 更多的读写文件函数1.字符读写函数fgetc(,17,fputc( )函数说明,原型:,int fputc(int ch,FILE *stream),功能:,将字符ch写入到指针stream指定的文件中,返回值:,成功时返回所写字符的,ASCII,码值;失败时返回,EOF,头文件:,stdio.h,说明:,相关函数参见第三章任务六中的putchar( )函数,fputc( )函数说明,18,【案例8-1】,从一个文本文件中读取一个字符,然后写入到另一个文本文件中。,分析,在“C:”目录下创建一个文本文件,text.txt,,内容如图8-1所示;,以读方式打开上述文本文件,并读取一个字符;,以写方式创建文件C:text1.txt,再将字符写入其中,同时在屏幕上进行显示。,【案例8-1】从一个文本文件中读取一个字符,然后写入到另一个,19,代码,代码,20,运行结果,咋整呢?,运行结果咋整呢?,21,2.,字符串读写函数fgets( )和fputs( ),fgets( )函数说明,原型:,char *fgets(char *str,int num,FILE,*steam),功能:,从,stream,中读取,num-1,个字符,放入,str,所指的字符数组中,并将,NULL,放入到最后一个字符后。,返回值:,成功时返回str;失败时返回空指针。,头文件:,stdio.h,说明:,str,可以是数组名;当读了,num-1,个字符后或遇到换行符时,函数停止读过程。,2.字符串读写函数fgets( )和fputs( ),22,fputs( )函数说明,原型:,int fputs(const char *str,FILE *stream),功能:,将str所指的字符串内容写入指针stream指定的文件中,字符串结束标志NULL并不写入。,返回值:,成功时返回,0,;失败时返回,EOF,。,头文件:,stdio.h,fputs( )函数说明,23,【案例8-2】,从一个文本文件中读取一个字符串,然后写入另一个文件中。,分析,仍以上例中C:,text.txt,文本文件为例;,以读方式打开上述文件,读取一个字符串;,以写方式创建C:,text2.txt,文本文件,再将字符串写入其中,同时在屏幕上显示。,【案例8-2】从一个文本文件中读取一个字符串,然后写入另一个,24,代码,代码,25,3.格式读取写入函数fscanf( )和fprintf( ),fscanf( )函数说明,原型:,int fscanf(FILE *stream,const char *format ,address-list),功能:,从文件指针,stream,指向的文件中读取数据,并按照格式化字符串要求的格式,将数据存入,address-list,地址列表中 (参照,scanf( ),函数)。,返回值:,成功则返回,address-list,个数;失败则返回,EOF,。,头文件:,stdio.h,说明:,在使用,%s,读取字符串时,结束位置必须是空格、制表符或回车。类似函数参见第三章任务六中的,scanf,( ),函数。,3.格式读取写入函数fscanf( )和fprintf(,26,fprintf( )函数说明,原型:,int fprintf(FILE *stream,const char *format ,argument-list),功能:,按指定格式,向,stream,指向的文件写入数据(参照,printf( ),函数)。,返回值:,成功则返回写入的字节数,失败则返回,EOF,。类似函数参见第三章任务六中的,printf,( ),函数。,头文件:,stdio.h,fprintf( )函数说明,27,【案例8-2】,从一个文本文件中读取一个字符串,然后写入另一个文件中。,分析,本问题与案例8-2相同,只是采用了,fscanf,( )和,fprintf,( )函数实现;,从,C:text.txt,文本文件中读取一个字符串,写入,C:text3.txt,文本文件中,同时在屏幕上进行显示。,【案例8-2】从一个文本文件中读取一个字符串,然后写入另一个,28,代码,代码,29,任务十 了解文件数据的定位(,了解,),实际应用中的数据文件,往往都会在文件的开始位置有一部分特殊的数据,以记录该文件的一些属性,如开发公司名称、版本号、数据结构等,这个特殊的数据区域,称之为文件头。因此,需要读取的数据往往并不在开始位置。所以,掌握,rewind( ),和,fseek( ),函数的应用显得尤为重要。,任务十 了解文件数据的定位(了解)实际应用中的数据文件,,30,1.rewind( )函数,rewind( )函数说明,原型:,void rewind(FILE *stream);,功能:,将,stream,指向的文件内部数据位置指针重新移动到开始位置,同时清除与,stream,相关的文件结束和错误标志。,返回值:,无。,头文件:,stdio.h,1.rewind( )函数,31,【案例8-4】,将某文件内容显示于屏幕上,然后将其复制到另一文件。,分析,仍以文本文件C:text.txt为例;,首先打开C:text.txt文件,顺序读取字符并显示于屏幕;,然后使用rewind( )将文件内部指针移动到开始位置,再顺序读取字符并写入C:text4.txt文件中。,【案例8-4】将某文件内容显示于屏幕上,然后将其复制到另一文,32,代码,代码,33,2,.fseek( )函数,原型:,int fseek(FILE *stream, long offset, int origin);,功能:,根据offset和origin的值,移动stream指向的文件内部数据位置指针。origin确定基准位置,offset是相对origin基准位置的偏移字节数,其值若是正数,表示指针向后移动,若是负数,表示指针向前移动。,返回值:,成功时返回0;失败时返回非0。,头文件:,stdio.h,说明:,origin,有三个基准位置,且有三个对应的宏定义,如表,2.fseek( )函数,34,origin取值,对应的宏,含义,0,SEEK_SET,文件开始位置,1,SEEK_CUR,文件当前位置,2,SEEK_END,文件结束位置,int fseek(FILE *stream, long offset, int origin);,origin取值对应的宏含义0SEEK_SET文件开始位置1,35,【案例8-5】,将C:text.txt文件第7字节处开始的连续10个字节读出,并显示于屏幕;然后,将文件末尾的8字节数据显示于屏幕。,分析,本例主要反映fseek( )函数可以实现任意移动文件内部指针的功能。第一次移动是通过fseek(fp,6,SEEK_SET);将文件内部指针从起始位置向后移动10个字节,另一次移动是通过fseek(fp,-8,SEEK_END); 将文件内部指针从文件尾位置向前移动8个字节。,【案例8-5】将C:text.txt文件第7字节处开始的连,36,代码,代码,37,任务十一 知识扩展,任务十一 知识扩展,38,1.ftell( )函数,原型:,long ftell(FILE *stream),功能:,返回,stream,指定的文件中内部数据指针位置。,返回值:,成功时返回当前内部指针位置,以字节数表示;失败时返回-,1L,。,头文件:,stdio.h,应用:,返回,fp,所指文件内部数据指针当前位置,long m;,if(m=ftell(fp)!=-1L)printf(m=%ldn,m);,else exit(0);,1.ftell( )函数,39,2.feof( )函数,原型:,int,feof(FILE,*,stream),功能:,检查文件内部数据指针位置,以确定是否已经到达stream指定的文件末尾。,返回值:,处在文件尾时返回非0值;否则返回0。,头文件:,stdio.h,说明:,该函数既可用于判断二进制文件,又可用于以判断文本文件。,应用:,检测文件内部数据指针是否到达文件尾,File *fp;,if(feof(fp),printf(文件内部数据指针已经到达文件尾n);,else exit(0);,2.feof( )函数,40,任务十二 精选案例,【案例8-6】,照片文件中隐藏机密信息。,分析,照片文件种类繁多,本例以.jpg为扩展名的文件为例;将照片文件存于C:,命名为photo.jpg;各类照片文件的数据都是以二进制形式存储的,且均有自己的文件结构,一般分两部分,前面是头结构数据,后面是二进制图像数据。头结构中已经确定了图像数据在文件中的起始位置和字节数等;假设某些重要的机密信息,如银行帐号和密码等,事先存于一个文本文件中。本例仍以C:text.txt为例;将text.txt追加到photo.jpg中,命名为photo1.jpg,即可实现“照片文件中隐藏机密信息”。为简化问题,本例仅以字符方式进行操作,将机密信息从text.txt中读取,然后写入photo.jpg文件中。,任务十二 精选案例【案例8-6】照片文件中隐藏机密信息。,41,代码,代码,42,【案例8-7】,查看照片文件中隐藏的机密信息。,分析,将案例8-6制作的、藏有机密信息的照片文件C:photo.jpg中的信息进行显示;仍以字符方式对文件进行读取操作,并将结果打印于计算机屏幕。,【案例8-7】查看照片文件中隐藏的机密信息。分析将,43,代码,代码,44,【案例8-8】,将案例8-6改为支持命令行参数的程序。,分析,以命令行的方式运行程序,可以接收用户输入的其它参数;支持命令行参数的主函数是main(int argc,char* argv)argc是整型变量,用来存放参数的个数,char* argv是一个指向命令行中各个字符串的指针数组;相关知识参阅第7章知识扩展内容。,【案例8-8】将案例8-6改为支持命令行参数的程序。分析,45,代码,代码,46,【案例8-9】,将-100到100之内,能被7或者11整除,但不能同时被7和11整除的所有整数,存入文件C:data.dat中,并将data.dat中数据显示于计算机屏幕。,分析,本例主要涉及文件的读写;编程方法,第一种:每找到一个符合条件的数据即直接写入文件;第二种:先用数组记录符合条件的数据,然后再一次性写入文件;为了使得程序的可读性更好些,主函数完成数据筛选、保存功能。对data.dat文件的显示功能,编制一个函数echo(char *fname),参数为主调函数传递的文件名称;,【案例8-9】将-100到100之内,能被7或者11整除,但,47,代码,代码,48,任务十三 本章要点汇总,1.数据文件有文本文件和二进制文件之分。文本文件记录的是字符的,ASCII,编码,而二进制文件记录的是数据在内存的存储状态。,2.文件操作的基本步骤是:打开文件、移动文件内部数据指针、读取或写入数据、关闭文件。,任务十三 本章要点汇总1.数据文件有文本文件和二进制文,49,3.对文件操作的函数汇总:,打开文件:,FILE *fopen(const char *fname,const char *mode),写入数据:,size_t fwrite(const void *buf,size_t size,size_t count,FILE *stream),读取数据:,size_t fread(void *buf,size_t size,size_t count,FILE *stream),关闭文件:,int fclose(FILE *stream),读一字符:,int fgetc(FILE *stream),写一字符:,int fputc(int ch,FILE,*stream),3.对文件操作的函数汇总:,50,读字符串:,char *fgets(char *str,int num,FILE *steam),写字符串:,int fputs(const char *str,FILE *stream),格式读取数据:,int fscanf(FILE *stream,const char *format ,address-list),格式写入数据:,int fprintf(FILE *stream,const char *format ,argument-list),指针移回文件起始位置:,int rewind(FILE *stream);,指针按指定方式移动:,int fseek(FILE *stream, long offset, int origin);,读字符串:char *fgets(char *str,i,51,返回数据指针当前位置:,long ftell(FILE *stream),测试文件指针当前是否指向文件尾:,int feof(FILE *stream),返回数据指针当前位置:long ftell(FILE *,52,任务十四 实力检验,1-6题 选择题 考察基础知识,7-10题阅读程序分析结果或填空,考察知识应用能力,重点:实验实训,作业:2、3、7、8,任务十四 实力检验1-6题 选择题 考察,53,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!