C语言程序设计课程第11章文件课件.ppt

上传人(卖家):三亚风情 文档编号:3471047 上传时间:2022-09-03 格式:PPT 页数:53 大小:421.50KB
下载 相关 举报
C语言程序设计课程第11章文件课件.ppt_第1页
第1页 / 共53页
C语言程序设计课程第11章文件课件.ppt_第2页
第2页 / 共53页
C语言程序设计课程第11章文件课件.ppt_第3页
第3页 / 共53页
C语言程序设计课程第11章文件课件.ppt_第4页
第4页 / 共53页
C语言程序设计课程第11章文件课件.ppt_第5页
第5页 / 共53页
点击查看更多>>
资源描述

1、使用数据文件的目的使用数据文件的目的1、数据文件的改动不引起程序的改动、数据文件的改动不引起程序的改动程序与数据分离程序与数据分离2、不同程序可以访问同一数据文件中的数据、不同程序可以访问同一数据文件中的数据数据共享数据共享3、能、能长期保存长期保存程序运行的中间数据或结果数据程序运行的中间数据或结果数据机等)按数据的组织形式:文本文件:ASCII文件,每个字节存放一个字符的ASCII码二进制文件:数据按其在内存中的存储形式原样存放如如 int型数型数100000010011100010000内存存储形式内存存储形式0010011100010000二进制形式二进制形式0011000100110

2、000001100000011000000110000ASCII形式形式文本文件特点文本文件特点:存储量大、速度慢、便于对字符操作存储量大、速度慢、便于对字符操作二进制文件特点二进制文件特点:存储量小、速度快、便于存放中间结果存储量小、速度快、便于存放中间结果磁盘文件磁盘文件输出文件缓冲区输出文件缓冲区输入文件缓冲区输入文件缓冲区程序数据区程序数据区a缓冲文件系统:缓冲文件系统:缓冲区缓冲区指令区指令区程序程序用户数据区用户数据区磁盘磁盘非缓冲文件系统:非缓冲文件系统:typedef struct int _fd;/文件号文件号 int _cleft;/缓冲区中剩下的字符数缓冲区中剩下的字符数

3、 int _mode;/文件操作方式文件操作方式 char *_next;/文件当前读写位置文件当前读写位置 char *_buff;/文件缓冲区位置文件缓冲区位置FILE;文件名文件名文件使用文件使用方式方式文件类型指针文件类型指针C程序程序操作系统操作系统磁盘磁盘要打开的文件名要打开的文件名使用文件方式使用文件方式例例 FILE *fp;fp=fopen(“f:yyqctest.dat”,”r”);例例 FILE *fp;char *filename=“f:yyqctest.dat”fp=fopen(filename,”r”);“r+/rb+”(读写读写)“a/ab”(追加追加)“w/wb

4、”(只写只写)“r/rb”(只读只读)“w+/wb+”(读写读写)“a+/ab+”(读写读写)为为输入输入打开一个打开一个文本文本/二进制二进制文件文件为为输出输出打开或建立一个打开或建立一个文本文本/二进制二进制文件文件为读为读/写打开一个文本写打开一个文本/二进制文件二进制文件为读为读/写建立一个文本写建立一个文本/二进制文件二进制文件为读为读/写打开或建立一个文本写打开或建立一个文本/二进制文件二进制文件向向文本文本/二进制二进制文件尾文件尾追加追加数据数据文件使用方式文件使用方式含义含义例例 文件打开与测试文件打开与测试 FILE *fp;if(fp=fopen(“aa.c”,“w”)

5、=NULL)printf(“File open error!n”);exit(0);文件打开时返回的文件类型指针文件打开时返回的文件类型指针磁盘文件磁盘文件输出文件缓冲区输出文件缓冲区输入文件缓冲区输入文件缓冲区程序数据区程序数据区a缓冲文件系统:缓冲文件系统:fclose不关闭文件可能会不关闭文件可能会丢失数据丢失数据 文件文件I/OI/O与终端与终端I/OI/O#define putc(ch,fp)fputc(ch,fp)#define getc(fp)fgetc(fp)#define putchar(c)fputc(c,stdout)#define getchar()fgetc(stdi

6、n)文本文件的结束标志,值为文本文件的结束标志,值为-1在在stdio.h中有定义中有定义例例11-1d1 从键盘输入字符,逐个从键盘输入字符,逐个 存到磁盘文件中,直到存到磁盘文件中,直到 输入输入#“为止为止#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);c

7、h=getchar();fclose(fp);例例11-1d2 读文本文件内容,读文本文件内容,并显示并显示#include main()FILE*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);判断文本文件是否结束while(c=fgetc(fp)!=EOF)putchar(c);fclose(fp);fclose(p1);fclose(p2);函数原型:in

8、t feof(FILE *fp)功能:判断文件是否结束返值:文件结束,返回真(非0);文件未结束,返回0 判断判断文本文件文本文件或或二进制二进制文件是否结束文件是否结束 while(!feof(fp)c=fgetc(fp);.例例g11-2 文件拷贝文件拷贝#include main()FILE*in,*out;char ch,infile10,outfile10;scanf(%s,infile);scanf(%s,outfile);if(in=fopen(infile,r)=NULL)printf(Cannot open infile.n);exit(0);if(out=fopen(out

9、file,w)=NULL)printf(Cannot open outfile.n);exit(0);while(!feof(in)fputc(fgetc(in),out);fclose(in);fclose(out);char *fgets(char *s,int n,FILE *fp)int fputs(char *s,FILE *fp)例例 从键盘读入字符串存入文件,再从文件读回显示从键盘读入字符串存入文件,再从文件读回显示fgetsfgets从从fpfp所指文件读所指文件读n-1n-1个字符送入个字符送入s s指向的内存区指向的内存区,并在最后加一个并在最后加一个00(若读入若读入n-

10、1n-1个字符前遇换行符或文件尾(个字符前遇换行符或文件尾(EOFEOF)即结束)即结束)fputsfputs把把s s指向的字符串写入指向的字符串写入fpfp指向的文件指向的文件#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(fp);if(fp=fopen(file.txt,r)=NULL)printf(cannt ope

11、n file);exit(0);while(fgets(string,81,fp)!=NULL)fputs(string,stdout);fclose(fp);while(fgets(str,n,fp)!=NULL)puts(str);dtos_2(fp,81);fclose(fp);程序运行:程序运行:Windows 98 Windows 2000 Windows XP z调用函数调用函数dtos_2的输出结果为的输出结果为:Windows 98 Windows 2000 Windows XP调用函数调用函数dtos_2的输出结果为:的输出结果为:Windows 98 Windows 200

12、0 Windows XP 例例 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例例 从键盘按格式输入数据存到磁盘文件中去从键盘按格式输入数据存到磁盘文件中去#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);/

13、*read from keyboard*/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*/fprintf(stdout,%s%d,c,b);/*print to screen*/fclose(fp);fclose(fp);printf(“n”);fclose(fp);fclose(fp);for(i=0;i10)return 1;else return 0;sca

14、nf(“%s%d%d%d”,a.n,&a.s0,&a.s1,&a.s2);a.ave=(a.s0+a.s1+a.s2)/3.0;fprintf(fp2,“%8s%4d%4d%4d%6.1fn”,b.n,b.s0,b.s1,b.s2,b.ave);fclose(fp1);fclose(fp2);remove(“aa.txt”);rename(“bb.txt”,“aa.txt”);fprintf(fp2,“%8s%4d%4d%4d%6.1fn”,a.n,a.s0,a.s1,a.s2,a.ave);flag=0;fp:要读/写的文件指针fread与fwrite 一般用于二进制文件的输入/输出例例 f

15、loat 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个学生数据,把他们转存到磁盘文件中去个学生数据,把他们转存到磁盘文件中去#include#define SIZE 2struct

16、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);return;for(i=0;iSIZE;i+)if(fwrite(&studi,

17、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%-15sn,studi.name,studi.num,studi.age,studi

18、.addr);fclose(fp);for(i=0;iave)fwrite(a+i,sizeof(float),1,p);fclose(p);printf(%.2f ,ai);printf(n);fclose(p);student_type),1,fp);rewind(fp1);printf(“n”);fread(score,sizeof(int),3,fp1);fread(&ave,sizeof(float),1,fp1);remove(“bina.dat”);rename(“binb.dat”,“bina.dat”);if(strcmp(a.n,b.n)=0)fwrite(&a,sizeo

19、f(stu),1,fp2);返回值:无例例g11-21 对一个磁盘文件进行显示和复制两次操作对一个磁盘文件进行显示和复制两次操作#include main()FILE*fp1,*fp2;fp1=fopen(d:yyqcch1.c,r);fp2=fopen(d:yyqcch2.c,w);while(!feof(fp1)putchar(getc(fp1);rewind(fp1);while(!feof(fp1)putc(getc(fp1),fp2);fclose(fp1);fclose(fp2);文件指针文件指针位移量(以起始点为基点位移量(以起始点为基点,移动的字节数移动的字节数)0 向后移动向

20、后移动0 向前移动向前移动起始点起始点文件开始文件开始 SEEK_SET 0文件当前位置文件当前位置 SEEK_CUR 1文件末尾文件末尾 SEEK_END 2例例 fseek(fp,100L,0);fseek(fp,50L,1);fseek(fp,-10L,2);例例 磁盘文件上有磁盘文件上有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)fse

21、ek(fp,i*sizeof(struct student_type),0);fread(&studi,sizeof(struct student_type),1,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(filen

22、ame);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%1d bytesn,length);fclose(fp);&b.s0,&b.s1,&b.s2,&b.ave)!=EOF)if(strcmp(a.n,b.n)=0)fseek(fp1,-26,1);fwrite(&a,sizeof(stu),1,fp1);break;例例 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;

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

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

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


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

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


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