业务14C语言程序设计-11-文件.ppt

上传人:wj 文档编号:9544216 上传时间:2023-05-19 格式:PPT 页数:15 大小:268.50KB
下载 相关 举报
业务14C语言程序设计-11-文件.ppt_第1页
第1页 / 共15页
业务14C语言程序设计-11-文件.ppt_第2页
第2页 / 共15页
业务14C语言程序设计-11-文件.ppt_第3页
第3页 / 共15页
业务14C语言程序设计-11-文件.ppt_第4页
第4页 / 共15页
业务14C语言程序设计-11-文件.ppt_第5页
第5页 / 共15页
业务14C语言程序设计-11-文件.ppt_第6页
第6页 / 共15页
业务14C语言程序设计-11-文件.ppt_第7页
第7页 / 共15页
业务14C语言程序设计-11-文件.ppt_第8页
第8页 / 共15页
业务14C语言程序设计-11-文件.ppt_第9页
第9页 / 共15页
业务14C语言程序设计-11-文件.ppt_第10页
第10页 / 共15页
业务14C语言程序设计-11-文件.ppt_第11页
第11页 / 共15页
业务14C语言程序设计-11-文件.ppt_第12页
第12页 / 共15页
业务14C语言程序设计-11-文件.ppt_第13页
第13页 / 共15页
业务14C语言程序设计-11-文件.ppt_第14页
第14页 / 共15页
业务14C语言程序设计-11-文件.ppt_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

业务14C语言程序设计-11-文件.ppt

《业务14C语言程序设计-11-文件.ppt》由会员分享,可在线阅读,更多相关《业务14C语言程序设计-11-文件.ppt(15页珍藏版)》请在冰点文库上搜索。

业务14C语言程序设计-11-文件.ppt

第十一章文件,11.1C文件概述文件:

存储在外部介质上数据的集合,是操作系统数据管理的单位,使用数据文件的目的1、数据文件的改动不引起程序的改动程序与数据分离2、不同程序可以访问同一数据文件中的数据数据共享3、能长期保存程序运行的中间数据或结果数据,文件分类按文件的逻辑结构:

记录文件:

由具有一定结构的记录组成(定长和不定长)流式文件:

由一个个字符(字节)数据顺序组成按存储介质:

普通文件:

存储介质文件(磁盘、磁带等)设备文件:

非存储介质(键盘、显示器、打印机等)按数据的组织形式:

文本文件:

ASCII文件,每个字节存放一个字符的ASCII码二进制文件:

数据按其在内存中的存储形式原样存放,文件处理方法缓冲文件系统:

高级文件系统,系统自动为正在使用的文件开辟内存缓冲区非缓冲文件系统:

低级文件系统,由用户在程序中为每个文件设定缓冲区,11.2文件类型指针文件结构体FILE缓冲文件系统为每个正使用的文件在内存开辟文件信息区文件信息用系统定义的名为FILE的结构体描述FILE定义在stdio.h中,typedefstructint_fd;/文件号int_cleft;/缓冲区中剩下的字符数int_mode;/文件操作方式char*_next;/文件当前读写位置char*_buff;/文件缓冲区位置FILE;,文件类型指针指针变量说明:

FILE*fp;用法:

文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件文件关闭后,它的文件结构体被释放,11.3文件的打开与关闭C文件操作用库函数实现,包含在stdio.h中文件使用方式:

打开文件-文件读/写-关闭文件系统自动打开和关闭三个标准文件:

标准输入-键盘stdin标准输出-显示器stdout标准出错输出-显示器stderr打开文件fopen函数原型:

FILE*fopen(char*name,char*mode),功能:

按指定方式打开文件返值:

正常打开,为指向文件结构体的指针;打开失败,为NULL,要打开的文件名,使用文件方式,例文件打开与测试FILE*fp;fp=fopen(“aa.c”,“w”);if(fp=NULL)printf(“Fileopenerror!

n”);exit(0);,例FILE*fp;fp=fopen(“c:

exampletest.dat”,”r”);,例FILE*fp;char*filename=“c:

exampletest.dat”fp=fopen(filename,”r”);,文件关闭fclose作用:

使文件指针变量与文件“脱钩”,释放文件结构体和文件指针函数原型:

intfclose(FILE*fp),功能:

关闭fp指向的文件返值:

正常关闭为0;出错时,非0,文件打开时返回的文件类型指针,不关闭文件可能会丢失数据,11.4文件的读写字符I/O:

fputc与fgetcfputc函数原型:

intfputc(intc,FILE*fp)功能:

把一字节代码c写入fp指向的文件中返值:

正常,返回c;出错,为EOF,fgetc函数原型:

intfgetc(FILE*fp)功能:

从fp指向的文件中读取一字节代码返值:

正常,返回读到的代码值;读到文件尾或出错,为EOF,文件I/O与终端I/O#defineputc(ch,fp)fputc(ch,fp)#definegetc(fp)fgetc(fp)#defineputchar(c)fputc(c,stdout)#definegetchar()fgetc(stdin),判断二进制文件是否结束while(!

feof(fp)c=fgetc(fp);.,例从键盘输入字符,逐个存到磁盘文件中,直到输入#“为止,#includemain()FILE*fp;charch,*filename=“out.txt”;if(fp=fopen(filename,w)=NULL)printf(cannotopenfilen);exit(0);printf(Pleaseinputstring:

);ch=getchar();while(ch!

=#)fputc(ch,fp);putchar(ch);ch=getchar();fclose(fp);,例读文本文件内容,并显示,#includemain()FILE*fp;charch,*filename=“out.txt”;if(fp=fopen(filename,”r)=NULL)printf(cannotopenfilen);exit(0);while(ch=fgetc(fp)!

=EOF)putchar(ch);fclose(fp);,判断文本文件是否结束,feof函数原型:

intfeof(FILE*fp)功能:

判断文件是否结束返值:

文件结束,返回真(非0);文件未结束,返回0,#includemain()FILE*in,*out;charch,infile10,outfile10;scanf(%s,infile);scanf(%s,outfile);if(in=fopen(infile,r)=NULL)printf(Cannotopeninfile.n);exit(0);if(out=fopen(outfile,w)=NULL)printf(Cannotopenoutfile.n);exit(0);while(!

feof(in)fputc(fgetc(in),out);fclose(in);fclose(out);,数据块I/O:

fread与fwrite函数原型:

size_tfread(void*buffer,size_tsize,size_tcount,FILE*fp)size_tfwrite(void*buffer,size_tsize,size_tcount,FILE*fp),功能:

读/写数据块返值:

成功,返回读/写的块数;出错或文件尾,返回0说明:

typedefunsignedsize_t;buffer:

指向要输入/输出数据块的首地址的指针size:

每个要读/写的数据块的大小(字节数)count:

要读/写的数据块的个数fp:

要读/写的文件指针fread与fwrite一般用于二进制文件的输入/输出,例从键盘输入4个学生数据,把它们转存到磁盘文件中去,#include#defineSIZE4structstudent_typecharname10;intnum;intage;charaddr15;studSIZE;main()inti;for(i=0;iSIZE;i+)scanf(%s%d%d%s,studi.name,voidsave()FILE*fp;inti;if(fp=fopen(d:

exampleexestu_dat,wb)=NULL)printf(cannotopenfilen);return;for(i=0;iSIZE;i+)if(fwrite(,voiddisplay()FILE*fp;inti;if(fp=fopen(d:

exampleexestu_dat,rb)=NULL)printf(“cannotopenfilen);return;for(i=0;iSIZE;i+)fread(,字符串I/O:

fgets与fputs函数原型:

char*fgets(char*s,intn,FILE*fp)intfputs(char*s,FILE*fp),功能:

从fp指向的文件读/写一个字符串返值:

fgets正常时返回读取字符串的首地址;出错或文件尾,返回NULLfputs正常时返回写入的最后一个字符;出错为EOF,例从键盘读入字符串存入文件,再从文件读回显示,fgets从fp所指文件读n-1个字符送入s指向的内存区,并在最后加一个0(若读入n-1个字符前遇换行符或文件尾(EOF)即结束),fputs把s指向的字符串写入fp指向的文件,#includemain()FILE*fp;charstring81;if(fp=fopen(file.txt,w)=NULL)printf(canntopenfile);exit(0);while(strlen(gets(string)0)fputs(string,fp);fputs(n,fp);fclose(fp);if(fp=fopen(file.txt,r)=NULL)printf(canntopenfile);exit(0);while(fgets(string,81,fp)!

=NULL)fputs(string,stdout);fclose(fp);,11.5文件的定位几个概念文件位置指针-指向当前读写位置的指针读写方式顺序读写:

位置指针按字节位置顺序移动,叫随机读写:

位置指针按需要移动到任意位置,叫rewind函数函数原型:

voidrewind(FILE*fp)功能:

重置文件位置指针到文件开头返值:

无,例对一个磁盘文件进行显示和复制两次操作,#includemain()FILE*fp1,*fp2;fp1=fopen(d:

examplebkcch12_4.c,r);fp2=fopen(d:

examplebkcch12_41.c,w);while(!

feof(fp1)putchar(getc(fp1);rewind(fp1);while(!

feof(fp1)putc(getc(fp1),fp2);fclose(fp1);fclose(fp2);,fseek函数函数原型:

intfseek(FILE*fp,longoffset,intwhence)功能:

改变文件位置指针的位置返值:

成功,返回0;失败,返回非0值,文件指针,位移量(以起始点为基点,移动的字节数)0向后移动0向前移动,起始点文件开始SEEK_SET0文件当前位置SEEK_CUR1文件末尾SEEK_END2,例fseek(fp,100L,0);fseek(fp,50L,1);fseek(fp,-10L,2);,ftell函数函数原型:

longftell(FILE*fp)功能:

返回位置指针当前位置(用相对文件开头的位移量表示)返值:

成功,返回当前位置指针位置;失败,返回-1L,,例磁盘文件上有3个学生数据,要求读入第1,3学生数据并显示,#includestdio.hmain()FILE*fp;charfilename80;longlength;gets(filename);fp=fopen(filename,rb);if(fp=NULL)printf(filenotfound!

n);elsefseek(fp,0L,SEEK_END);length=ftell(fp);printf(LengthofFileis%1dbytesn,length);fclose(fp);,例求文件长度,11.6出错的检测ferror函数函数原型:

intferror(FILE*fp)功能:

测试文件是否出现错误返值:

未出错,0;出错,非0说明每次调用文件输入输出函数,均产生一个新的ferror函数值,所以应及时测试fopen打开文件时,ferror函数初值自动置为0,clearerr函数函数原型:

voidclearerr(FILE*fp)功能:

使文件错误标志置为0返值:

无说明:

出错后,错误标志一直保留,直到对同一文件调clearerr(fp)或rewind或任何其它一个输入输出函数,例ferror()与clearerr()举例,#includeintmain(void)FILE*stream;stream=fopen(DUMMY.FIL,w);getc(stream);if(ferror(stream)printf(ErrorreadingfromDUMMY.FILn);clearerr(stream);if(!

ferror(stream)printf(Errorindicatorcleared!

);fclose(stream);return0;,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2