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

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

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

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

    特殊限制:

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

    关 键  词:
    语言程序设计 课程 11 文件 课件
    资源描述:

    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;

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

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


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


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

    163文库