欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    C语言课件第九章.ppt

    • 资源ID:5386382       资源大小:874.51KB        全文页数:48页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言课件第九章.ppt

    第9章 文件操作,1,主要内容,9.1 文件概念9.2 C文件系统9.3 利用高级I/O库函数存取文件,2,9.1 文件概念,从文件的组织形式来看,有顺序文件和索引文件。从文件的存取方式看,有顺序存取文件和随机存取文件。从文件内容的表示形式来看,有二进制文件和文本文件等。文件有各种属性,基本的属性有只读、只写、可读可写。,3,9.2 C文件系统,C语言把每一个文件都看成一个连续的、有序的谓之“流”(stream)的字节序列,流中的每一个字节都可以单独存取。文本流是一种以行为单位组织的字符序列,行以特定字符结束。二进制流是一种字节序列(请注意区分“字符”与“字节”的不同含义),没有行的概念。C语言把计算机系统中的各种设备都抽象成文件。C文件系统由若干I/O函数组成。第一类为标准设备I/O函数(standard I/O)第二类为标准高级I/O函数(standard high-level I/O)第三类为低级I/O函数(low-level I/O),4,9.3 利用高级I/O库函数存取文件,9.3.1 打开文件9.3.2 读写文件9.3.3 关闭文件9.3.4 文件结尾检测与读/写错误检测9.3.5 文件定位9.3.6 其他文件操作函数,9.3 利用高级I/O库函数存取文件,C程序中利用高级I/O函数读写文件的过程与其他语言中的读写文件的过程是类似的,通常按如下的顺序进行。打开文件 读写文件 若干次 关闭文件,9.3.1 打开文件,一般调用形式是:fopen(文件名,存取方式)“文件名”即为要读写文件的外部名。它可以是字符串、字符数组名、或指向文件名的一个指针,允许包含路径。文件名和路径的形式、要求与C所在的环境有关。如在DOS和Windows环境下,file1.cpp、d:cat1cat2file2.cpp a:/file3.cpp都是正确的文件名参数。,9.3.1 打开文件,“存取方式”也以字符串的形式给出,用来指出如何读写文件。,9.3.1 打开文件,“存取方式”,9.3.1 打开文件,“存取方式”,9.3.1 打开文件,fopen()函数的返回值打开文件成功:fopen函数返回给调用者的返回值是一个FILE型指针(称为“文件指针”),这以后程序中便用这个指针来代替文件的外部名存取文件。打开文件失败:fopen函数给调用者返回一个NULL空指针。失败原因:文件不存在、权限不够、磁盘空间不足等。,9.3.1 打开文件,FILE结构类型(头文件stdio.h中)typedef struct short level;/*用于检查缓冲区满/空*/unsigned flags;/*文件状态标志*/char fd;/*文件描述符*/unsigned char hold;/*如果无缓冲区,退回输入字符*/short bsize;/*缓冲区大小*/unsigned char*buffer;/*数据传输缓冲区*/unsigned char*curp;/*当前活动指针*/unsigned istemp;/*临时文件指示符*/short token;/*用于合法性检查*/FILE;,9.3.1 打开文件,正确的fopen调用过程:FILE*fp;if(fp=fopen(filename,mode)=NULL)puts(“Cant open file.n”);exit(1);,9.3.1 打开文件,C文件系统中的标准设备文件,9.3.2 读写文件,读写字符函数putc和getc读写字符串函数fgets与fputs 格式化读写函数fscanf与fprintf 二进制读写函数fread与fwrite,9.3.2 读写文件,getc函数用来从已打开文件的当前位置读出一个字符。它的调用形式是:getc(fp)putc函数用来向文件中写一个字符,调用形式是:putc(ch,fp)putchar和getchar在头文件stdio.h中的实现#define getchar()getc(stdin)#define putchar(c)putc(c,stdout),读写字符函数putc和getc,9.3.2 读写文件,#include int main(int argc,char*argv)FILE*fp;int filecopy(FILE*fp);if(argc=1)filecopy(stdin);else while(-argc0)if(fp=fopen(*+argv,“r”)=NULL)printf(“cant open%sn”,*argv);exit(1);else filecopy(fp);fclose(fp);,putc和getc函数的应用,int filecopy(FILE*fp)int c;while(c=getc(fp)!=EOF)putc(c,stdout);,例9.1:复制文件,9.3.2 读写文件,fgets函数用来从指定的文件中读出一行或一个指定长度的字符串,其调用形式是:fgets(line,n,fp);line 可以是字符数组名、字符指针名,它是从文件中读出的字符串在程序中的存放处。n是一个int数,指出从文件中读出的字符串的长度。注意,实际读出的字符个数最多为 n-1个字符。fp是文件指针,它是读出数据所在的文件。fgets函数是一个返回值为字符型的指针的函数。在正常情况下该函数返回读出字符串的存放地址,当遇到EOF或读出错误时,该函数将返回NULL。,读写字符串函数fgets与fputs,9.3.2 读写文件,char*fgets(char*line,int n,FILE*fp)int ch;char*str;str=line;while(-n0,fgets函数的内部处理过程,9.3.2 读写文件,例9.2:利用fgets函数显示指定的文本文件(由命令行参数给定)的内容。#include int main(int argc,char*argv)FILE*fp;char str128;/*读入字符串存放处,每行最多为128个字符*/if(fp=fopen(argv1,“r”)=NULL)printf(“Can not open file.n”);exit(1);while(!feof(fp)if(fgets(str,126,fp)/*请思考,为什么用126*/printf(“%s”,str);fclose(fp);return 0;,fgets函数运用实例,9.3.2 读写文件,fputs函数用来向指定的文件中写入一串字符。它的一般调用形式是:fputs(line,fp)其中参数fp为写入文件的文件指针。line是指定写入文件的字符串,它可以是指向字符串的指针、字符数组名、还可以是括在双引号中的字符串常量。fputs函数的返值是一个int型数,当写入成功时返值为0,不成功时返回非0值。,fputs函数,9.3.2 读写文件,例9.3:利用fgets函数和fputs函数实现的一个简单的回显程序。#include int main(void)char str20;while(fgets(str,20,stdin)!=NULL,fputs函数和fgets函数综合使用,9.3.2 读写文件,fscanf和 fprintf的调用形式是fscanf(fp,format,input-list)fprintf(fp,format,output-list)fp为读写文件的指针。format是字符串形式的I/O格式说明,它可以是包含有I/O格式说明的字符数组名、字符指针名和字符串常数。input-list和output-list分别是输入项表和输出项表。fscanf函数返回实际赋值的变元数(不包含被压缩或跳过的字段),输入操作出错则返回EOF。fprintf函数的返回值是实际写出的字符数,若出错则返回负值。,格式化读写函数fscanf与fprintf,9.3.2 读写文件,例9.4:程序先从键盘上读入一个字符串和一个整数,然后将它们以文本的形式写入到软盘的test的文件中,最后再从软盘的test文件中读出并显示到屏幕上。,fscanf函数、fprintf函数的应用,#include#include#include/*使用exit函数需要该头文件*/int main(void)FILE*fp;char string80;int v;if(fp=fopen(“a:test”,“w”)=NULL)puts(“Cannot open file a:test!”);exit(1);,9.3.2 读写文件,puts(“Enter a string and a number:”);scanf(“%s%d”,string,fscanf函数、fprintf函数的应用,9.3.2 读写文件,二进制I/O:把数据在内存中的存储形式不进行任何转换直接写入文件,反之把原先直接写入文件中的内存存储形式的数据再读回内存。fread与fwrite函数的调用形式是:fwrite(buf,size,count,fp)fread(buf,size,count,fp),二进制读写函数fread与fwrite,9.3.2 读写文件,buf是读写数据在内存中的存放处,通常为数组名或指针。对fwrite而言,buf中存放的内容就是要写入到文件中去的数据;对fread而言,从文件中读出的数据被存放到指定的buf中。size通常为unsigned int型数(不同的系统实现可能不同,这无关紧要),指出读写的数据项的长度(以字节为单位)。count通常也为unsigned int型数,用来指出读写数据项的个数。fp是读写文件的文件指针。fread和fwrite分别用来一次从向指定文件中读写sizecount个字节。它们的返回值是实际读写的数据项个数。,二进制读写函数fread与fwrite,9.3.2 读写文件,例9.5:先使用fwrite以二进制方式一次向文件中写入8个数据,然后使用fread以二进制方式从文件中一次读出多个数据项。,fread和fwrite函数的应用,#include#include int main(void)FILE*fp;float f=1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,bal8;int i;/*以二进制写方式打开文件test*/if(fp=fopen(“test”,“wb”)=NULL)printf(“Cannot open file test!n”);exit(1);,9.3.2 读写文件,/*把存储在数组f中的8个float型数一次性写入文件test*/fwrite(f,sizeof(float),8,fp);fclose(fp);/*关闭以二进制写方式打开的文件test*/*以二进制读方式重新打开文件test,以便从文件中读*/if(fp=fopen(“test”,“rb”)=NULL)printf(“Cannot open file test!n”);exit(1);/*从文件test中一次性读出8个float型数,并顺序存储到数组bal中*/if(fread(bal,sizeof(float),8,fp)!=8)if(feof(fp)/*这条语句判别是否遇到文件尾,还是读出错误*/printf(“End of filen”);elseprintf(“Read file errorn”);for(i=0;i8;i+)printf(“%fn”,bali);,fread和fwrite函数的应用,9.3.2 读写文件,二进制文件与文本文件文件的格式化读写与二进制读写,9.3.3 关闭文件,关闭文件是打开文件的逆操作,它切断文件描述符、文件指针、文件外部名之间的联系。关闭文件是通过调用fclose函数进行的,它的调用形式是:fclose(fp);需要程序员关闭文件的原因:操作系统允许程序同时打开的文件个数是有限的,为了能同时打开更多的文件,不再使用的文件应及时关闭;在写入文件的情况下,数据不是直接写到文件上去的,而是先写到文件读写缓冲区中,若系统发生非正常情况(死机或断电),当前缓冲区中的未写到盘上的内容就可能丢失掉了。,9.3.4 文件结尾检测与读/写错误检测,程序中判断文件是否已到了文件末尾一般通过调用feof函数进行。feof函数的一般调用形式是:feof(fp);feof函数检测到文件结束标志位为1则返回非0值,否则返回0值。,9.3.4 文件结尾检测与读/写错误检测,#include#include int main(int argc,char*argv)FILE*in,*out;char ch;if(in=fopen(argv1,“rb”)=NULL)printf(“Cannot open%s file!n”,argv1);exit(1);,例9.6:利用feof函数判断文件结尾的示例,9.3.4 文件结尾检测与读/写错误检测,if(in=fopen(argv2,“wb”)=NULL)printf(“Cannot open%s file!n”,argv2);exit(1);while(!feof(in)ch=getc(in);if(!feof(in)putc(ch,out);fclose(in);fclose(out);return 0;,利用feof函数判断文件结尾的示例,9.3.4 文件结尾检测与读/写错误检测,ferror函数用来检查文件操作是否出错若有错返回非0值否则返回0值。对于文件的每种操作,如果操作出错都将置文件状态标志flag 中的错误标志位。为及时发现及处理错误,保证文件操作的正确性,程序中每次调用文件操作函数后应立即调用ferror函数检查本次文件操作是否有错,并执行相应错误处理程序。,ferror函数,9.3.4 文件结尾检测与读/写错误检测,对例9.6程序的修改doch=getc(in);if(ferror(in)puts(“Find a reading error!”);exit(1);else putc(ch,out);if(ferror(out)puts(“Find a writting error!”);exit(1);while(!feof(in);,ferror函数,9.3.5 文件定位,9.3.5 文件定位,rewind函数的功能是使文件的读写位置指针定位于文件的开头,同时将清除文件的结束标志和错误标志。一般调用形式是:rewind(fp);,rewind函数,9.3.5 文件定位,fseek函数数用来将文件的读写位置指针定位到相对于文件某个位置起的第n个字节处。它的一般调用形式是:fseek(fp,offset,origin);fp为文件指针。offset 为long int 型数,是一个位移量,用于指出相对于文件某个位置的字节数。负值:使文件位置指针从当前位置处向文件开始的方向移动 正值:使文件位置指针从当前位置处向文件尾的方向移动 origin是一个int型数,其值仅能为:0 相对于文件开始位置1 相对于当前文件读写位置指针的当前位置2 相对于文件尾,fseek函数,9.3.5 文件定位,例9.7:使用fseek函数、实现文件的随机存取程序例。#include#include int main(void)FILE*fp;int i,info,newnumber,oldnumber=125,array5;int resultfile21;const char*file=randomfile.dat;if(fp=fopen(file,“wb+”)=NULL)fprintf(stderr,“Cannot open file%s.n”,file);exit(1);,fseek函数,9.3.5 文件定位,/*以二进制方式向文件randomfile.dat中写入20个整型数*/for(i=0;i20;i+)fwrite(,fseek函数例9.7,9.3.5 文件定位,/*在第15个数后插入一个新的数 6*/fread(resultfile,sizeof(int),6,fp);fseek(fp,-5*sizeof(int),2);fwrite(,fseek函数例9.7,9.3.5 文件定位,ftell函数返回文件的当前读写位置值。该值是一个long 整型数对二进制流是从文件开始计算的字节数;对文本流给出的位置值可能不准确,因为可能发生文件行结束符的转换,会影响文件的大小。ftell函数只适用于以二进制方式打开的文件。,ftell函数,9.3.6 其他文件操作函数,9.3.6 其他文件操作函数,fflush函数的功能是刷新缓冲区(flushing buffer)。对于写打开的文件,把输出缓冲区的信息写入文件对于读打开的文件,则清除输入缓冲区中的内容fflush函数的一般使用形式是:fflush(fp);操作成功返回0值,否则返回EOF。,fflush函数,9.3.6 其他文件操作函数,例9.9:用getchar等函数输入数据时,使用fflush函数清除stdin,以便能获得正确的输入数据。#include int main(void)char c;int b;scanf(“%d”,fflush函数的使用,9.3.6 其他文件操作函数,remove函数用来删除指定的文件。一般使用形式是:remove(文件名);删除成功返回0,否则返回非0。,fremove函数,9.3.6 其他文件操作函数,例9.10:删除指定的文件。#include int main(void)char filename80;printf(“Enter filename:”);gets(filename);remove(filename);return 0;,fremove函数的使用,

    注意事项

    本文(C语言课件第九章.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开