书签 分享 收藏 举报 版权申诉 / 29
上传文档赚钱

类型第10章-文件(阅读)课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4605991
  • 上传时间:2022-12-24
  • 格式:PPT
  • 页数:29
  • 大小:427KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《第10章-文件(阅读)课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    10 文件 阅读 课件
    资源描述:

    1、第10章 文件本章主要内容:l 文件、文件系统和文件指针的概念l 缓冲文件系统文件打开方式l 缓冲文件系统文件读写函数l 文件定位与随机读写l 非缓冲文件系统打开与读写函数10.1 文件、流和文件系统的概念文件、流和文件系统的概念 文件:存储指存储在外部介质上一组相关数据的集合,是操作系统数据管理的单位.使用数据文件的目的1、数据文件的改动不引起程序的改动程序与数据分离2、不同程序可以访问同一数据文件中的数据数据共享3、能长期保存程序运行的中间数据或结果数据C语言把文件看作一个字节序列,即由一个一个的字节组成,称为“流(stream)”,以字节为单位访问,输入输出的数据流的开始和结束仅受程序控

    2、制而不受物理符号(如回车换行符)控制。文件分类按文件的逻辑结构:v记录文件:由具有一定结构的记录组成(定长和不定长)v流式文件:由一个个字符(字节)数据顺序组成按存储介质:v普通文件:存储介质文件(磁盘、磁带等)v设备文件:非存储介质(键盘、显示器、打印机等)按数据的组织形式:v文本文件:ASCII文件,每个字节存放一个字符的ASCII码v二进制文件:数据按其在内存中的存储形式原样存放如 int型数100000010011100010000内存存储形式0010011100010000二进制形式0011000100110000001100000011000000110000ASCII形式文本文件

    3、特点:存储量大、速度慢、便于对字符操作二进制文件特点:存储量小、速度快、便于存放中间结果文件处理方法v缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区v非缓冲文件系统:低级文件系统,由用户在程序中为每个文件设定缓冲区磁盘文件输出文件缓冲区输入文件缓冲区程序数据区a缓冲文件系统:缓冲区指令区程序用户数据区磁盘非缓冲文件系统:10.2 文件类型指针文件结构体FILEv 缓冲文件系统为每个正使用的文件在内存开辟文件信息区v文件信息用系统定义的名为FILE的结构体描述vFILE定义在stdio.h中typedef struct int _fd;/文件号 int _cleft;/缓冲区

    4、中剩下的字符数 int _mode;/文件操作方式 char *_next;/文件当前读写位置 char *_buff;/文件缓冲区位置FILE;文件类型指针v指针变量说明:FILE*fp1,*fp2*fp3;v用法:l文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件l文件关闭后,它的文件结构体被释放文件名文件使用方式文件类型指针C程序操作系统磁盘 系统自动地在内存区为每个正在使用的文件名开辟系统自动地在内存区为每个正在使用的文件名开辟一个缓冲区,为程序中的每一个文件使用,当执行一个缓冲区,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘

    5、文件将数据先读入内存读文件的操作时,从磁盘文件将数据先读入内存“缓冲区缓冲区”,装满后再从内存,装满后再从内存“缓冲区缓冲区”依此读入依此读入接收的变量。执行写文件的操作时,先将数据写入接收的变量。执行写文件的操作时,先将数据写入内存内存“缓冲区缓冲区”,待内存,待内存“缓冲区缓冲区”装满后再写入装满后再写入文件。文件。10.3 缓冲文件系统10.3.1 文件的打开与关闭&C文件操作用库函数实现,包含在stdio.h&文件使用方式:打开文件-文件读/写-关闭文件&系统自动打开和关闭三个标准文件:v标准输入-键盘 stdinv标准输出-显示器 stdoutv标准出错输出-显示器 stderr打开

    6、文件fopenv函数形式:fopen(文件名,使用文件方式文件名,使用文件方式)v功能:按指定方式打开文件v返值:正常打开,为指向文件结构体的指针;打开失败,为NULL例 文件打开与测试 FILE *fp;fp=fopen(“aa.c”,“w”);if(fp=NULL)printf(“File open error!n”);exit(0);例 FILE *fp;fp=fopen(“c:fengyibkctest.dat”,”r”);例 FILE *fp;char *filename=“c:fengyibkctest.dat”fp=fopen(filename,”r”);“r+/rb+”(读写)

    7、“a/ab”(追加)“w/wb”(只写)“r/rb”(只读)“w+/wb+”(读写)“a+/ab+”(读写)为输入打开一个文本/二进制文件为输出打开或建立一个文本/二进制文件为读/写打开一个文本/二进制文件为读/写建立一个文本/二进制文件为读/写打开或建立一个文本/二进制文件向文本/二进制文件尾追加数据文件使用方式含义文件关闭fclosev作用:使文件指针变量与文件“脱钩”,释放文件结构体和文件指针v函数形式:fclose(文件指针)v功能:关闭文件指针fp指向的文件v返值:正常关闭为0;出错时,非0文件打开时返回的文件类型指针磁盘文件输出文件缓冲区输入文件缓冲区程序数据区a缓冲文件系统:fc

    8、lose不关闭文件可能会丢失数据10.3.2 文件的读写字符读写函数:fputc与fgetcvfputcl函数形式:fputc(fp)l功能:把一字节代码c写入文件指针fp指向的文件中l返值:正常,返回c;出错,为EOFvfgetcl函数形式:fgetc(fp)l功能:从文件指针fp指向的文件中读取一字节代码l返值:正常,返回读到的代码值;读到文件尾或出错,为EOF 文件I/O与终端I/O#define putc(ch,fp)fputc(ch,fp)#define getc(fp)fgetc(fp)#define putchar(c)fputc(c,stdout)#define getchar

    9、()fgetc(stdin)例 文件拷贝例 从键盘输入字符,逐个 存到磁盘文件中,直到 输入#“为止#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*

    10、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);判断文本文件是否结束vfeofl函数形式:feof(fp)l功能:判断文件是否结束l返值:文件结束,返回真(非0);文件未结束,返回0#include main()FILE*in,*out;char ch,infile10,outfile10;scanf(%s,infile);scanf(%s,outfile);i

    11、f(in=fopen(infile,r)=NULL)printf(Cannot open infile.n);exit(0);if(out=fopen(outfile,w)=NULL)printf(Cannot open outfile.n);exit(0);while(!feof(in)fputc(fgetc(in),out);fclose(in);fclose(out);字符串读写函数:fgets与fputsv函数形式:fgets(str,n,fp)fputs(str,fp)v功能:从fp指向的文件读/写一个字符串v返值:lfgets正常时返回读取字符串的首地址;出错或文件尾,返回NULL

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

    13、fp);if(fp=fopen(file.txt,r)=NULL)printf(cannt open file);exit(0);while(fgets(string,81,fp)!=NULL)fputs(string,stdout);fclose(fp);数据块读写函数:fread与fwritev函数形式:fread(buffer,size,count,fp)fwrite(buffer,size,count,fp)v功能:读/写数据块v返值:成功,返回读/写的块数;出错或文件尾,返回0v格式说明:lbuffer:指向要输入/输出数据块的首地址的指针lsize:每个要读/写的数据块的大小(字节

    14、数)lcount:要读/写的数据块的个数lfp:要读/写的文件指针lfread与fwrite 一般用于二进制文件的输入/输出例 float f2;FILE *fp;fp=fopen(“aa.dat”,“rb”);fread(f,4,2,fp);for(i=0;i2;i+)fread(&fi,4,1,fp);例 struct student int num;char name20;char sex;int age;float score3;stud10;for(i=0;i10;i+)fread(&studi,sizeof(struct student),1,fp);例 从键盘输入4个学生数据,把

    15、他们转存到磁盘文件中去#include#define SIZE 2struct 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:fengyiexestu_dat,wb)=NULL)printf(cannot open filen);r

    16、eturn;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:fengyiexestu_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%-1

    17、5sn,studi.name,studi.num,studi.age,studi.addr);fclose(fp);格式化读写函数:fprintf与fscanfv函数形式:fprintf(fp,format,arg_list)fscanf(fp,format,arg_list)v功能:按格式对文件指针fp指示的文件进行读写操作v返值:成功,返回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例 从键

    18、盘按格式输入数据存到磁盘文件中去#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 from keaboard*/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*/

    19、fprintf(stdout,%s%d,c,b);/*print to screen*/fclose(fp);10.3.3 文件的定位几个概念v文件位置指针-指向当前读写位置的指针v读写方式l顺序读写:位置指针按字节位置顺序移动。l随机读写:位置指针按需要移动到任意位置。rewind函数v函数形式:rewind(fp)v功能:重置文件位置指针到文件开头v返值:无例 对一个磁盘文件进行显示和复制两次操作#include main()FILE*fp1,*fp2;fp1=fopen(d:fengyibkcch12_4.c,r);fp2=fopen(d:fengyibkcch12_41.c,w);wh

    20、ile(!feof(fp1)putchar(getc(fp1);rewind(fp1);while(!feof(fp1)putc(getc(fp1),fp2);fclose(fp1);fclose(fp2);fseek函数v函数形式:fseek(fp,offset,origin)v功能:改变文件位置指针的位置v返值:成功,返回0;失败,返回非0值文件指针位移量(以起始点为基点,移动的字节数)0 向后移动0 向前移动起始点文件开始 SEEK_SET 0文件当前位置 SEEK_CUR 1文件末尾 SEEK_END 2例 fseek(fp,100L,0);fseek(fp,50L,1);fseek(

    21、fp,-10L,2);ftell函数v函数形式:ftell(fp)v功能:返回位置指针当前位置(用相对文件开头的位移量表示)v返值:成功,返回当前位置指针位置;失败,返回-1L,例 磁盘文件上有3个学生数据,要求读入第1,3学生数据并显示main()int i;FILE*fp;if(fp=fopen(studat,rb)=NULL)printf(cant open filen);exit(0);for(i=0;i3;i+=2)fseek(fp,i*sizeof(struct student_type),0);fread(&studi,sizeof(struct student_type),1,

    22、fp);printf(%s%d%d%sn,studi.name,studi.num,studi.age,studi.addr);fclose(fp);#include struct student_type int num;char name10;int age;char addr15;stud3;#includestdio.h main()FILE*fp;char filename80;long length;gets(filename);fp=fopen(filename,rb);if(fp=NULL)printf(file not found!n);else fseek(fp,0L,SE

    23、EK_END);length=ftell(fp);printf(Length of File is%1d bytesn,length);fclose(fp);例 求文件长度10.3.4 出错的处理ferror函数v函数形式:ferror(fp)v功能:测试文件是否出现错误v返值:未出错,0;出错,非0v说明l每次调用文件输入输出函数,均产生一个新的ferror函数值,所以应及时测试lfopen打开文件时,ferror函数初值自动置为0clearerr函数v函数原型:clearerr(fp)v功能:使文件错误标志置为0v返值:无v说明:出错后,错误标志一直保留,直到对同一文件调clearerr(

    24、fp)或rewind或任何其它一个输入输出函数例 ferror()与clearerr()举例#include int main(void)FILE*stream;stream=fopen(DUMMY.FIL,w);getc(stream);if(ferror(stream)printf(Error reading from DUMMY.FILn);clearerr(stream);if(!ferror(stream)printf(Error indicator cleared!);fclose(stream);return 0;非缓冲文件系统依赖于操作系统,通过操作系统的非缓冲文件系统依赖于操

    25、作系统,通过操作系统的功能对文件进行读写,是系统级的输入输出,它不功能对文件进行读写,是系统级的输入输出,它不设文件结构体指针,只能读写二进制文件,但效率设文件结构体指针,只能读写二进制文件,但效率高、速度快。高、速度快。由于由于ANSI标准不再包括非缓冲文件系统,因此本标准不再包括非缓冲文件系统,因此本节的目的只是为了便于读者阅读现存的含低级输入节的目的只是为了便于读者阅读现存的含低级输入输出函数的输出函数的C程序,而不是提倡再用这类函数去开程序,而不是提倡再用这类函数去开发新的、供使用的发新的、供使用的C语言软件。语言软件。10.4 非缓冲文件系统10.4.1 文件的打开、建立与关闭打开文

    26、件fopenv函数形式:open(filename,access);v功能:打开名字为filename的文件,并access来设置该文件的访问模式。打开方式打开方式作用作用0(O_RDONLY)只能读只能读1(O_WRONLY)只能写只能写2(O_RDWR)可以读写可以读写v返值:正常打开,一个正整数,它就是与该文件相联结的文件说明符;打开失败,为-1例如:例如:open(Li_l,0)open(Li_l,0),打开一个名为,打开一个名为“LL1”LL1”的文件,只能用于输入。的文件,只能用于输入。建立文件creatv函数形式:creat(filename,pmode);v功能:建立由file

    27、name指定名字并由pmode指定访问模式的新文件。v返值:操作成功,大于或等于0的文件说明符;打开失败,为-1关闭文件closev函数形式:close(fd);v功能:关闭与fd相联结的文件。v返值:操作成功时为0;失败时为-110.4.2 文件的读写读文件readv函数形式:read(fd,buf,count)v功能:从fd说明的文件中读取count个字节到buf所指向的缓冲区。l其中fd为文件号lbuf是一个地址 v返值:执行read成功,则函数返回实际读入的字节数;若遇文件结束则函数值返回0;若有错,返回-1。例:从文件例:从文件TEST.TST中读取它的中读取它的前半前半100个字节

    28、并放到数组个字节并放到数组buffer中,并将该字符串显示出来。中,并将该字符串显示出来。main()int fd;char buffer100;if(fd=open(TEST.TST,0)=-1)/*打开文件*/printf(cannot open file!n);exit(0);if(read(fd,buffer,100)!=100)/*判断读写的字节数是否正确*/printf(Possible read error.);printf(%sn,buffer);close(fd);写文件writev函数形式:write(fd,buf,count)v功能:将count个字节从buf写入到fd说

    29、明的文件中。l其中fd为文件号lbuf是一个地址 v返值:执行write成功,则函数返回实际写入的字节数;若写入失败则返回-1。例:从终端键盘读入例:从终端键盘读入100个个字符,然后输出到磁盘文字符,然后输出到磁盘文件件”TEST.TST”中中。main()int fd;char buffer100;if(fd=open(TEST.TST,0)=-1)/*打开文件*/printf(cannot open file!n);exit(0);gets(buffer);if(write(fd,buffer,100)!=100)printf(write error);close(fd);随机读写定位函

    30、数lseekv函数形式:lseek(fd,offset,origin)v功能:来移动文件位置指针到一个指定的位置,从而实现对非缓冲文件的随机存取。与缓冲文件系统的fseek()函数相同。v参数说明:l fdfd:文件号,文件号,buf是一个地址,它指向程序员指定的是一个地址,它指向程序员指定的“缓冲区缓冲区”的开头的开头文件指针。文件指针。l origin:origin:起始点起始点,它指出以什么位置为基准进行移动,用它指出以什么位置为基准进行移动,用0,1和和2来表示。来表示。0,1和和2分别代表分别代表“文件开始位置文件开始位置”、文件、文件“当前位当前位置置”和和“文件末尾文件末尾”。l offset:offset:位移量,它指出以位移量,它指出以“起始点起始点”为基点,向前移动的字为基点,向前移动的字节数,位移量是节数,位移量是longlong型数据。若位移量为负数,则指针回头型数据。若位移量为负数,则指针回头向后移动。向后移动。本章结束,谢谢!

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:第10章-文件(阅读)课件.ppt
    链接地址:https://www.163wenku.com/p-4605991.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库