《第10章 文件及文件管理.ppt》由会员分享,可在线阅读,更多相关《第10章 文件及文件管理.ppt(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第1010章章 文件及文件管理文件及文件管理(听明白、记住、会用)10.1 10.1 文件的基本概念文件的基本概念 文件:程序、数据、文档的总称输入:输入、读、取 输出:输出、写、存文件的存储方式:ASCII码 1024=49 48 50 52 =0100 1001 0100 1000 0101 0000 0101 0010 二进制存储方式:1024 =0000 0100 0000 000010.2 文件的打开与关闭10.2.1 文件的打开 FILE*fp;fp=fopen(文件名),);工作方式:读 写 追加 文本文件(只能读写)r w a 二进制文件(只能读写)rb wb ab 文本文件
2、(可读写)r+w+a+二进制文件(可读写)rb+wb+ab+(r w a b +)例:打开一个将计算结果能够存放在外存的文件 FILE *fp;fp=fopen(“result.c”,”w”);说明:1 工作方式 r 读 w 写 a 追加 b 二进制文件 +可读、可写2.用w打开的文件,若原文件中已有文件内容,则将原内容清除。3.用a打开的文件,文件指针指向文件尾部。4.若文件打开出错,则返回一个NULL值。因此常常用下列格式提示出错:if(fp=fopen(“r.c”,“r”)=NULL)printf(“cannot open this file”);exit(0);其中:exit(0)为返
3、回编辑状态,0可省。5.打开文件时,工作方式可以组合。例如:rb,wb,b+fclose(fp)10.3 文件的读写11.3.1 把一个字符输出到文件中 fputc(ch,fp);11.3.2 从文件中读出一个字符 ch=fgetc(fp)例:将从键盘上输入的内容以文本方式存于文件 file.c 中 10.2.2 文件的关闭算法:1.定义文件指针变量2.打开写文件3.输入字符,遇“#”标记结束4.输出到文件,转第3步5.关文件 程序:#include main()FILE*fp;char ch;if(fp=fopen(file.c,w)=NULL)printf(errorn);exit(0);
4、ch=getchar();while(ch!=#)fputc(ch,fp);ch=getchar();例:将存于文件 file.c中的内容再取出显示算法:1.定义文件指针变量2.打开读文件3.取字符,到文件未结束4.输出到屏幕,转第3步5.关文件 程序:#includemain()FILE*fp;char ch;if(fp=fopen(file.c,r)=NULL)printf(errorn);exit(0);ch=fgetc(fp);while(!feof(fp)printf(%c,ch);ch=fgetc(fp);例:完成文件from.c 到文件to.c 的复制算法:1.定义两个文件指针变
5、量 2.打开读文件(from.c)3.打开写文件(to.c)4.从from读入字符,输出到文件to,直到文件结束。(feof(fp)为1时,文件指针指到文件尾。5.关文件 程序:#includemain()FILE*fp1,*fp2;char ch;clrscr();if(fp1=fopen(“from.c,r)=NULL)printf(errorn);exit(0);if(fp2=fopen(“to.c,w)=NULL)printf(errorn);exit(0);while(!feof(fp1)ch=fgetc(fp1);fputc(ch,fp2);putchar(ch);例:统计文件fr
6、om.c 的字符个数例:将两个文件合并例:用二进制方式将c盘某一文件复制到软盘上例:将一个c 语言程序读出显示在屏幕上#include main()FILE*fp;char ch;if(fp=fopen(“10-1.1,r)=NULL)printf(errorn);exit(0);while(!feof(fp)ch=fgetc(fp);putchar(ch);例:使用 copy from.c to.c 命令格式复制文件#include main(int argc,char*argv)FILE*fp,*fp1;char ch;crscr();if(argc!=3)printf(num error
7、);if(fp=fopen(argv1,r)=NULL)printf(error1n);exit(0);if(fp1=fopen(argv2,w)=NULL)printf(error2n);exit(0);while(!feof(fp)ch=fgetc(fp);fputc(ch,fp1);putchar(ch);10.3.3 将数据按指定格式输出到文件 fprinf(fp,“”,);10.3.4 将数据按指定格式读出且显示fscanf(fp,);例:将1到10 的平方根存于文件result.c中#include“stdio.h”#include“math.h”main()int k;FILE
8、*fp1;fp1=fopen(result.c,”w”);For(k=1;k11;k+)fprintf(fp1,%d%5.2f,k,sqrt(k);close(fp1);例:将上例建立的文件读出显示在屏幕上#include“stdio.h”main()FILE*fp;int i,n;float s;if(fp=fopen(result.c,r)=NULL)printf(errorn);exit(0);for(i=1;i=10;i+)fscanf(fp,%d%f,&n,&s);printf(%5d%5.2fn,n,s);fclose(fp)例:利用写字板编辑环境建立一个成绩数据文件(score.
9、c,学号,姓名,成绩,用“”分开,读入时,各格式之间不加任何符号),然后利用该文件输出每人的信息。main()FILE*fp;int n;char s3;int i;if(fp=fopen(d:tcname.txt,r)=NULL)printf(errorn);for(i=1;i=3;i+)fscanf(fp,%d,%s,&n,s);printf(%5d%5sn,n,s);fclose(fp);总结:#includemain()FILE*fp;long n;char name10;float s;if(fp=fopen(“score.c,r)=NULL)printf(errorn);exit(
10、0);while(!feof(fp)fscanf(fp,%ld%s%fn,&n,name,&s);printf(%ld,%s,%fn,n,name,s);fclose(fp);10.3.5 结构变量写语句fwrite(写的内容(buffer),一次写的大小(size),写多少次(count),fp)10.3.6 10.3.6 结构变量读语句结构变量读语句 fread(存放位置,一次写的大小,写多少次,fp)例:利用TC环境建立的学生成绩文件,利用结构变量再建一个文件,利用该结构变量输出每一个学生的信息程序:#include struct student long n;char name4;in
11、t s;stu10;main()FILE*fp1,*fp2;int i;i=1;clrscr();if(fp1=fopen(myc.c,r)=NULL printf(errorn);exit(0);if(fp2=fopen(out.c,w+)=NULL)exit(0);clrscr();while(!feof(fp1)fscanf(fp1,%ld%s%dn,&stui.n,stui.name,&stui.s);printf(%ld,%s,%dn,stui.n,stui.name,stui.s);fwrite(&stui,sizeof(struct student),1,fp2);i=i+1;f
12、close(fp1);rewind(fp2);i=1;while(!feof(fp2)fread(&stui,sizeof(struct student),1,fp2);printf(%ld,%s,%dn,stui.n,stui.name,stui.s);i+;fclose(fp2);1 建立文本文件,各数据项间用“,”,使用fscanf()语句时各格式符间也用“,”2 使用(!feof(fp2)函数,注意空格和使用文件指针。3 注意向字符数组读入数据,名字前不能用&。4 在结构类型中定义字符数组时,下标最大值比实际串长度大1。5 在写字板中保存的文件,在浏览器中不显示后缀。6 Fscanf(
13、)句中一定不要使用“n。经验总结:7注意当前目录(进入时目录为当前目录)。8注意系统环境与配置。9又读又写的文件,打开文件时注意使用“+“。10使用while()语句时,注意准备记数变量。11Fread(),fwrite()语句主要用于结构类型的读和写。12注意程序中的函数的用法及其意义。10.分段调试程序的方法要掌握。14注意“=“与”=“的用法。15文件指针的名字在定义时注意使用“*“。16注意三组读写语句的区别。17多上机注意不断总结经验。18概念一定要理解透。例:产生10个10以内的随机整数#include stdio.h#include math.hmain()FILE*fp;int
14、 i;srand(1);if(fp=fopen(r2.c,w)=NULL)printf(errorn);exit(0);for(i=1;i=10;i+)fprintf(fp,%d%dn,i,rand()%10);fclose(fp);例:将上题保存的数据读出显示例:将上题保存的数据读出显示#include stdio.hmain()FILE*fp;int n,s,i;if(fp=fopen(r2.c,r)=NULL)printf(errorn);exit(0);for(i=1;i=10;i+)fscanf(fp,%d%d,&n,&s);printf(%5d%5dn,n,s);close(fp)
15、;例:统计10以内的每个数各有多少?#include stdio.hmain()FILE*fp;int n,s,i;static int num11;if(fp=fopen(r2.c,r)=NULL)printf(errorn);exit(0);for(i=1;i=10;i+)fscanf(fp,%d%d,&n,&s);nums+;printf(%5d%5dn,n,s);close(fp);for(i=0;i11;i+)printf(%d%dn,i,numi);例:生成4个商场一年中每个月销售金额(100万元以内),然后统计每个商场年平均销售金额。#include stdio.h#includ
16、e math.hmain()FILE*fp;int i,k,n,s,m;srand(1);if(fp=fopen(r2.c,w)=NULL)printf(errorn);exit(0);for(k=1;k5;k+)fprintf(fp,%5d,k);for(i=1;i=12;i+)fprintf(fp,%5d,rand()%100);fclose(fp);if(fp=fopen(r2.c,r)=NULL)printf(errorn);exit(0);for(k=1;k5;k+)s=0;fscanf(fp,%5d,&n);printf(%d,n);for(i=1;i=12;i+)fscanf(fp,%5d,&m);printf(%5d,m);s=s+m;printf(%6.2fn,s/12.);fclose(fp);