c语言电子教案课件13.ppt

上传人(卖家):晟晟文业 文档编号:4190338 上传时间:2022-11-18 格式:PPT 页数:28 大小:184.93KB
下载 相关 举报
c语言电子教案课件13.ppt_第1页
第1页 / 共28页
c语言电子教案课件13.ppt_第2页
第2页 / 共28页
c语言电子教案课件13.ppt_第3页
第3页 / 共28页
c语言电子教案课件13.ppt_第4页
第4页 / 共28页
c语言电子教案课件13.ppt_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、UNIX C编程编程*Page 1第第13章章 文件文件知识点:知识点:各种读写操作各种读写操作 指针操作指针操作重点:重点:各种读写操作各种读写操作UNIX C编程编程*Page 213.1 C文件概述文件概述q文件:存储在外部介质上数据的集合文件:存储在外部介质上数据的集合,是操作系统数据管理的单位是操作系统数据管理的单位q文件分类文件分类v 按文件的逻辑结构:按文件的逻辑结构:记录文件:由具有一定结构的记录组成(定长和不定长)记录文件:由具有一定结构的记录组成(定长和不定长)流式文件流式文件:由一个个字符(字节)数据顺序组成:由一个个字符(字节)数据顺序组成v 按存储介质:按存储介质:普

2、通文件:存储介质文件(磁盘、磁带等)普通文件:存储介质文件(磁盘、磁带等)设备文件设备文件:非存储介质(键盘、显示器、打印机等):非存储介质(键盘、显示器、打印机等)v 按数据的组织形式:按数据的组织形式:文本文件文本文件:ASCII文件文件,每个字节存放一个字符的每个字节存放一个字符的ASCII码码 二进制文件二进制文件:数据按其在内存中的存储形式原样存放:数据按其在内存中的存储形式原样存放UNIX C编程编程*Page 313.1 C文件概述文件概述q 文本文件与二进制文件的区别文本文件与二进制文件的区别文本文件特点文本文件特点:存储量大、速度慢、存储量大、速度慢、便于对字符操作便于对字符

3、操作二进制文件特点二进制文件特点:存储量小、速度快、存储量小、速度快、便于存放中间结果便于存放中间结果十进制十进制10000“1”的的ASCII码码49“0”的的ASCII码码48UNIX C编程编程*Page 413.1 C文件概述文件概述q 文件处理方法文件处理方法v 缓冲文件系统缓冲文件系统:高级高级文件系统,系统自动为正在使文件系统,系统自动为正在使用的文件开辟内存缓冲区用的文件开辟内存缓冲区v 非缓冲文件系统非缓冲文件系统:低级文件系统,由用户在程序中:低级文件系统,由用户在程序中为每个文件设定缓冲区为每个文件设定缓冲区UNIX C编程编程*Page 513.1 C文件概述文件概述q

4、 读文件与写文件读文件与写文件v 读文件:磁盘文件中的数据传送到计算机内存的操作。读文件:磁盘文件中的数据传送到计算机内存的操作。v 写文件:从计算机内存向磁盘文件中传送数据的操作。写文件:从计算机内存向磁盘文件中传送数据的操作。q FILE类型类型v 缓冲文件系统为每个正使用的文件在内存开辟文件信息区缓冲文件系统为每个正使用的文件在内存开辟文件信息区v 文件信息用系统定义的名为文件信息用系统定义的名为FILE的结构体描述的结构体描述v FILE定义在定义在stdio.h中中UNIX C编程编程*Page 613.1 C文件概述文件概述typedef structshort level;/*缓

5、冲区满或空的程度缓冲区满或空的程度*/unsigned flags;/*文件状态标志文件状态标志*/char fd;/*文件描述符文件描述符*/unsigned char hold;/*如无缓冲区不读取字符如无缓冲区不读取字符*/short bsize;/*缓冲区的大小缓冲区的大小*/unsigned char*buffer;/*数据缓冲区的位置数据缓冲区的位置*/unsigned char*curp;/*指针,当前的指向指针,当前的指向*/unsigned istemp;/*临时文件,指示器临时文件,指示器*/short token;/*用于有效性检查用于有效性检查*/FILE;UNIX C

6、编程编程*Page 713.1 C文件概述文件概述q 定义文件类型指针定义文件类型指针v FILE*fp;v fp指向存放已打开文件的文件信息的结构体变量。指向存放已打开文件的文件信息的结构体变量。v 简称简称fp指向已打开的文件指向已打开的文件UNIX C编程编程*Page 813.2 文件的打开与关闭文件的打开与关闭q 文件使用方式文件使用方式:打开文件打开文件-文件读文件读/写写-关闭文件关闭文件q C文件操作用文件操作用库函数库函数实现实现,包含在包含在stdio.hq 系统系统自动自动打开和关闭三个打开和关闭三个标准文件标准文件:v 标准输入标准输入-键盘键盘 stdinv 标准输出

7、标准输出-显示器显示器 stdoutv 标准出错输出标准出错输出-显示器显示器 stderrUNIX C编程编程*Page 9q 打开文件打开文件fopenv函数原型:函数原型:FILE *fopen(char *name,char*mode);v用法:用法:FILE *fopen(文件名文件名,使用文件方式使用文件方式);v功能:返回一个指向指定文件的指针。功能:返回一个指向指定文件的指针。v返值:正常打开,为指向文件结构体的指针;返值:正常打开,为指向文件结构体的指针;打开失败,为打开失败,为NULL13.2 文件的打开与关闭文件的打开与关闭UNIX C编程编程*Page 1013.2 文

8、件的打开与关闭文件的打开与关闭q 使用文件方式使用文件方式v 文件打开时,系统文件打开时,系统自动自动建立文件结构体变量,并返回建立文件结构体变量,并返回指向它的指针指向它的指针UNIX C编程编程*Page 1113.2 文件的打开与关闭文件的打开与关闭q 为增强程序的可靠性,常用下面的方法打开一个文件为增强程序的可靠性,常用下面的方法打开一个文件FILE*fp;if(fp=fopen(文件名文件名,使用方式使用方式)=NULL)printf(Can not open this filen);exit(0);q 例:例:v FILE*fp;char*filename=c:test.dat,*

9、read=r;fp=fopen(filename,read);/*OR fp=fopen(c:test.dat,r);*/关于关于exit()函数函数1)用法:)用法:void exit(程序状态值程序状态值);2)功能:关闭已打开的所有文件,结束程序运行,返回操)功能:关闭已打开的所有文件,结束程序运行,返回操作系统,并将作系统,并将“程序状态值程序状态值”返回给操作系统。当返回给操作系统。当“程序程序状态值状态值”为为0时,表示程序正常退出;非时,表示程序正常退出;非0值时,表示程序值时,表示程序出错退出。出错退出。UNIX C编程编程*Page 1213.2 文件的打开与关闭文件的打开与

10、关闭q 关闭文件关闭文件v 函数原型:函数原型:int fclose(FILE *fp)v 功能:关闭功能:关闭fp指向的文件指向的文件v 返值:正常关闭为返值:正常关闭为0;出错时;出错时,非非0v 先把缓冲区中的数据输出到磁盘文件,然后才释放文先把缓冲区中的数据输出到磁盘文件,然后才释放文件指针变量,防止数据缓冲区内的数据丢失。件指针变量,防止数据缓冲区内的数据丢失。UNIX C编程编程*Page 1313.3 文件的读写文件的读写q字符的读写字符的读写vfputc 函数原型:函数原型:int fputc(int ch,FILE*fp)功能:把一字符功能:把一字符ch写入写入fp指向的文件

11、中,同时将读写位指向的文件中,同时将读写位置指针向前移动置指针向前移动1个字节(即指向下一个写入位置)个字节(即指向下一个写入位置)返值:正常,返回返值:正常,返回ch;出错,为出错,为EOF(其值在头文件(其值在头文件stdio.h中,被定义为中,被定义为-1)v fgetc 函数原型:函数原型:int fgetc(FILE*fp)功能:从功能:从fp指向的文件中读取指向的文件中读取一字符,一字符,同时将读写位置同时将读写位置指针向前移动指针向前移动1个字节(即指向下一个写入位置)。个字节(即指向下一个写入位置)。返值:正常,返回读到的代码值返值:正常,返回读到的代码值;读到文件尾或出错,为

12、读到文件尾或出错,为EOFUNIX C编程编程*Page 14q feof()v函数原型:函数原型:int feof(FILE *fp)v功能:判断文件是否结束功能:判断文件是否结束v返值:文件结束,返回真(非返值:文件结束,返回真(非0);文件未结束,返回);文件未结束,返回013.3 文件的读写文件的读写q 例:从键盘输入字符,例:从键盘输入字符,逐个存到磁盘文件中,逐个存到磁盘文件中,直到输入直到输入#为止。为止。#include main()FILE*fp;char ch,filename10;printf(Please input filename:);scanf(%s,filena

13、me);/*输入输入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);q 例:输出文本文件例:输出文本文件的内容的内容#include main()FILE*fp;char ch,*filename=out.txt;if(fp=fopen(filename,r)=NULL)printf(cannot

14、 open filen);exit(0);while(ch=fgetc(fp)!=EOF)putchar(ch);fclose(fp);q 例:复制文本文件例:复制文本文件#include main()FILE*in,*out;char ch,readfile10,writefile10;scanf(%s,readfile);scanf(%s,writefile);if(in=fopen(readfile,r)=NULL)printf(Cannot open readfile.n);exit(0);if(out=fopen(writefile,w)=NULL)printf(Cannot ope

15、n writefile.n);exit(0);while(!feof(in)fputc(fgetc(in),out);fclose(in);fclose(out);UNIX C编程编程*Page 1513.3 文件的读写文件的读写q字符串的读写字符串的读写v函数原型:函数原型:char *fgets(char *s,int n,FILE *fp)int fputs(char *s,FILE *fp)v功能:从功能:从fp指向的文件读指向的文件读/写一个字符串写一个字符串v返值:返值:fgets正常时返回读取字符串的首地址;出错或文件尾,正常时返回读取字符串的首地址;出错或文件尾,返回返回NUL

16、Lfputs正常时返回写入的最后一个字符;出错为正常时返回写入的最后一个字符;出错为EOFv fgets从从fp所指文件读所指文件读n-1个字符送入个字符送入s指向的内存区指向的内存区,并在最后加一个并在最后加一个0(若读入若读入n-1个字符前遇换行符或文件个字符前遇换行符或文件尾尾EOF即结束即结束)UNIX C编程编程*Page 1613.3 文件的读写文件的读写q 例:例:从键盘按格式从键盘按格式输入数据存到磁盘文输入数据存到磁盘文件中去,再从文件读件中去,再从文件读回显示。回显示。#include main()FILE *fp;char string81;if(fp=fopen(fil

17、e.txt,w)=NULL)printf(cannt open file);exit(0);while(strlen(gets(string)0)fputs(string,fp);fputs(n,fp);/*完成多行字符串完成多行字符串*/fclose(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);UNIX C编程编程*Page 1713.3 文件的读写文件的读写q数据块的读写数据块的

18、读写v函数原型:函数原型:int fread(void *buffer,int size,int count,FILE *fp)int fwrite(void *buffer,int size,int count,FILE*fp)v功能:读功能:读/写数据块写数据块v返值:成功,返回读返值:成功,返回读/写的块数;出错或文件尾,返回写的块数;出错或文件尾,返回0说明:说明:buffer:指向要输入指向要输入/输出数据块的首地址的指针输出数据块的首地址的指针size:每个要读每个要读/写的数据块的大小(字节数)写的数据块的大小(字节数)count:要读:要读/写的数据块的个数写的数据块的个数fp

19、:要读:要读/写的文件指针写的文件指针fread与与fwrite 一般用于一般用于二进制文件二进制文件的输入的输入/输出输出UNIX C编程编程*Page 1813.3 文件的读写文件的读写v例例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(struc

20、t student),1,fp);UNIX C编程编程*Page 1913.3 文件的读写文件的读写q 例例 从键盘输入从键盘输入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()

21、;void save()FILE*fp;int i;if(fp=fopen(d:tcstu_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:tcstu_dat,rb)=NULL)printf(Cannot open filen);return;for(i=

22、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);UNIX C编程编程*Page 2013.3 文件的读写文件的读写q格式化读写格式化读写v函数原型:函数原型:int fprintf(FILE *fp,char *format,arg_list)int fscanf(FILE *fp,char *format,arg_list)v功能:按格式对文件进行功能:按格式对文件进行

23、I/O操作操作v返值:成功返值:成功,返回返回I/O的个数的个数;出错或文件尾出错或文件尾,返回返回EOFUNIX C编程编程*Page 2113.4 文件的定位文件的定位q文件位置指针文件位置指针-指向当前读写位置的指针指向当前读写位置的指针q读写方式读写方式v顺序读写:位置指针按字节位置顺序移动顺序读写:位置指针按字节位置顺序移动v随机读写:位置指针按需要移动到任意位置随机读写:位置指针按需要移动到任意位置qrewind函数函数v函数原型:函数原型:void rewind(FILE *fp)v功能:重置文件位置指针到文件开头功能:重置文件位置指针到文件开头UNIX C编程编程*Page 2

24、2例例#includemain()FILE*fp1,*fp2;fp1=fopen(file1.c,r);fp2=fopen(file2.c,w);while(!feof(fp1)putchar(getc(fp1);rewind(fp1);while(!feof(fp1)putc(getc(fp1),fp2);fclose(fp1);fclose(fp2);getch();UNIX C编程编程*Page 2313.4 文件的定位文件的定位qfseek函数(由于二进制文件)函数(由于二进制文件)v函数原型:函数原型:int fseek(FILE *fp,long offset,int whence

25、)int fseek(文件类型指针文件类型指针,位移量位移量,起始点起始点)v功能:改变文件位置指针的位置功能:改变文件位置指针的位置,偏移量取偏移量取long型数据型数据v返值:成功,返回返值:成功,返回0;失败,返回非;失败,返回非0值值起始点的取值起始点的取值文件开始文件开始 SEEK_SET 0文件当前位置文件当前位置 SEEK_CUR 1文件末尾文件末尾 SEEK_END 2例例 fseek(fp,100L,0)指针移到离文件头指针移到离文件头100字节处字节处 fseek(fp,50L,1)指针移到离当前位置指针移到离当前位置50字节处字节处 fseek(fp,-10L,2)指针从

26、文件末尾向后退指针从文件末尾向后退10字节字节UNIX C编程编程*Page 2413.4 文件的定位文件的定位q 例例 在磁盘在磁盘文件上存文件上存有有10个学个学生的数据,生的数据,将第将第1、3、5、7、9个学生的个学生的数据输入数据输入计算机,计算机,并显示。并显示。#include struct student_type int num;char name10;stud10;main()int i;FILE*fp;if(fp=fopen(stu_dat,rb)=NULL)printf(cant open filen);exit(0);for(i=0;i10;i+=2)fseek(fp

27、,i*sizeof(struct student_type),0);fread(&studi,sizeof(struct student_type),1,fp);printf(%s%d%dn,studi.name,studi.num);fclose(fp);UNIX C编程编程*Page 2513.4 文件的定位文件的定位qftell函数函数v函数原型:函数原型:long ftell(FILE *fp)v功能:返回当前位置功能:返回当前位置(用相对文件开头的位移量表示用相对文件开头的位移量表示)v返值:成功,返回当前位置;失败,返回返值:成功,返回当前位置;失败,返回-1LUNIX C编程编程

28、*Page 2613.4 文件的定位文件的定位q 例例 求文求文件的长件的长度。度。#include 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,SEEK_END);length=ftell(fp);printf(Length of File is%d bytesn,length);fclose(fp);UNIX C编程编程*Page 2713.5 出错的检测出错的检测qfer

29、ror函数函数v函数原型:函数原型:int ferror(FILE *fp)v功能:测试文件是否出现错误功能:测试文件是否出现错误v返值:未出错,返回返值:未出错,返回0值;出错,返回非值;出错,返回非0值值v说明说明 每次调用文件输入输出函数,均产生一个新的每次调用文件输入输出函数,均产生一个新的ferror函函数值,所以应及时测试数值,所以应及时测试 fopen打开文件时,打开文件时,ferror函数初值自动置为函数初值自动置为0UNIX C编程编程*Page 2813.5 出错的检测出错的检测qclearerr函数函数v函数原型:函数原型:void clearerr(FILE *fp)v功能:使文件错误标志置为功能:使文件错误标志置为0v说明:出错后,错误标志一直保留,直到对同一文件调说明:出错后,错误标志一直保留,直到对同一文件调clearerr(fp)或或rewind或任何其它一个输入输出函数或任何其它一个输入输出函数

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(c语言电子教案课件13.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

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


163文库-Www.163Wenku.Com |网站地图|