




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Lesson 20 数据文件及其操作1输入/输出的概念及学习目的31学会读写数据文件操作系统的规范输入/输出设备:键盘/显示器假设需求改动输入/输出的流向,需求重定向另一个输入/输出的对象就是磁盘数据文件运用数据文件来建立程序中的数据或保管数据到文件中,是C程序设计的习惯用法。23文件的概念2文件:是指一组相关数据的有序集合。 这个数据集有一个称号,叫做文件名。操作系统是以文件为单位对数据进展管理的。 例如:C:24000101program.c,其中k:24000101叫途径,program.c是文件名。当需求运用文件的时候,需求将文件调入内存中。 33C言语中运用的数据文件的概念2从文件编
2、码和数据的组织方式来看,数据文件可分为ASCII码文件和二进制码文件。 也叫文本文件 文件程序数据区输出文件缓冲区输入文件缓冲区磁盘上内存中操作系统在内存中的缓冲区43文件的概念2ASCII数据文件:文件在磁盘中存放时每个字符占一个字节,每个字节存放相应字符的ASCII码值。二进制数据文件:存储介质上保管的数据采用与内存数据一致的表示方式存储(为二进制方式。 例: 在文件中存放整数2147483647ASCII码32H31H34H37H34H38H33H36H34H37H二进制FFHFFHFFH7FH言语把文件看作是一个字符字节的序列,即由一个一个字符字节的数据顺序组成。一个输入输出流就是一个
3、字节流或二进制流。 5 文件的位置指针位置指针用来指示当前的读写位置。 普通情况下,在对字符文件进展顺序读写时,文件的位置指针指向文件开头,这时假设对文件进展读的操作,就读第一个字符,然后文件的位置指针顺序向后移一个位置,在下一次执行读的操作时,就将指针指向的第二个字符读入。依此类推,直到遇文件尾. 文件头 读写当前位置 文件尾有时希望在一个文件的原有数据之后再添加新的数据,应该把文件位置指针移到文件尾,然后再接着写入新的数据,这就是文件的追加。63文件的操作3文件的根本操作 定义文件指针 定义格式为:FILE * 文件指针变量; 例如 FILE *fp; FILEf5;文件的翻开 文件指针
4、= fopen文件名,操作方式fp = fopen(c:file.dat, r);if (fp= NUUL) printf(“nCannot open the file); return 1; 73文件的操作3文件使用方式含 义r只读,文本以只读方式打开一个已有的文本文件。w只写,文本以只写方式建立一个新的文本文件。如果该文件已存在则将它删去,然后重新建立一个新文件。a追加,文本以添加方式打开一个文本文件,在文件末尾添加。如果该文件不存在,则建立一个新文件后再添加。rb只读,二进制以只读方式打开一个已有的二进制文件。wb只写,二进制以只写方式打开一个二进制文件。ab追加,二进制以添加方式打开一
5、个二进制文件。83文件的操作3翻开文件文件方式文件使用方式含 义r+读写,文本以读写方式打开一个已有的文本文件。w+读写,文本以读写方式建立一个新的文本文件。a+读写,文本以读写方式打开一个文本文件,在文件末尾添加和修改,如果文件不存在,则建立一个新文件后再添加和修改。rb+读写,二进制以读写方式打开一个已有的二进制文件。wb+读写,二进制以读写方式建立一个新的二进制文件。ab+读写,二进制以读写方式打开一个二进制文件。93文件的操作3文件的封锁 fclose文件指针; 例如:fclose(fp); 文件的读写操作字符读写函数 :fgetc( )和fputc( )字符串读写函数:fgets(
6、)和fputs( )数据块读写函数:fread( )和fwrite( )格式化读写函数:fscanf( )和fprinf( ) 前往值:封锁胜利前往值为;否那么前往EOF(-1) 103文件的操作4字符读写操作 1、fgetc( )的调用格式: 字符型变量= fgetc( 文件指针 ); 例如:ch = fgetc(fp);语句功能是:从fp指向的文件中读取一个字符并将这个字符赋给char型变量ch 。遇终了,前往EOF。2、fputc( )的调用格式: fputc(字符,文件指针); 例如: fputc(ch, fp); 语句功能是:将字符型变量ch的内容写入文件指针fp所指的文本文件中。写
7、入胜利,前往字符本身,反之EOF。11读文件根本过程 #include stdio.hint main()int i,x;FILE * fp ;fp=fopen(array.txt,r);if(fp=NULL)printf(文件不存在);exit(0);printf(从文件中读取的数据:n);for(i=1;i10;i+)fscanf(fp,%d,&x);if(i%5=0) printf(n);printf(%4d,x); fclose(fp);return 0;1、定义FILE 指针2、翻开文件3、确保文件有效4、用函数读文件5、封锁文件写文件根本过程 #include stdio.hint
8、 main()int i,x;FILE * fp ;fp=fopen(array2.txt,“w);if(fp=NULL)printf(文件不存在);exit(0);printf(从文件中读取的数据:n);for(i=1;i10;i+)scanf(%d,&x);fprintf(fp,%4d,x); fclose(fp);return 0;1、定义FILE 指针2、翻开文件3、确保文件有效4、用函数往文件写数据5、封锁文件a和w的区别 #include stdio.hint main()int i,x;FILE * fp ;fp=fopen(array.txt,“a);if(fp=NULL)pr
9、intf(文件不存在);exit(0);printf(从文件中读取的数据:n);for(i=1;i10;i+)scanf(%d,&x);fprintf(fp,%4d,x); fclose(fp);return 0;翻开文件方式二进制文件和文本文件 #include stdio.hint main()int i,x;FILE * fp ;fp=fopen(array4.txt,wb);if(fp=NULL)printf(文件不存在);exit(0);printf(将从键盘输入数据写入文件:n);scanf(%d,&x);fwrite(&x,sizeof(x),1,fp);fclose(fp);r
10、eturn 0;#include stdio.hint main()int i,x;FILE * fp ;fp=fopen(array5.txt,w);if(fp=NULL)printf(文件不存在);exit(0);printf(将从键盘输入数据写入文件:n);scanf(%d,&x);fprintf(fp,%d,x);fclose(fp);return 0;二进制文件和文本文件 20_e.c3文件的操作4例1:读取一个给定的文本文件,并将文件的内容显示在屏幕上。 问题分析需求读取文本文件,所以以“r操作方式将文件翻开。 文本文件的终了标志为EOF-1。当文件读写指针指向EOF时,表示文件曾
11、经读到了尾部。因此,在读文件时,需求设计一个while循环语句,它的终了条件是读取的字符等于EOF。需求读取的文件称号经过命令行参数带入,这样可以扩展程序的运用范围,添加程序运转的灵敏性。17算法描画 开场终了ch!=EOF非空行NNargs!=2输出提示信息输出chYYYN翻开不胜利输出提示信息fgetc()chfclose()fgetc()ch18#include int main( ) FILE *fp; int ch; char name100; printf(“请输入文件名:n) ; gets(name); fp=fopen(name,r); if(fp= NULL ) /* 翻开文
12、件 */ printf(Cannot open file !); return 1; ch = fgetc(fp); /* 以字符方式读取文件 */ while (ch!=EOF) putchar(ch); ch = fgetc(fp); fclose(fp); /* 封锁文件 */ return 0;193文件的操作4字符串读写操作 1、fgets( )的调用格式: fgets(字符数组名,n,文件指针); 例如:fgets(str, n, fp);语句功能是:从fp所指的文件中读出n-1个字符并存入字符数组str中。2、fputs ( )的调用格式: fputs(字符串,文件指针) ; 例
13、如: fputs(“C program, fp);语句功能是:将字符串“C program写入fp所指的文件中。 203文件的操作4例2:编程从键盘输入一个源文件的文件名和一个目的文件的文件名,将源文件的内容拷贝到目的文件中。21#include int main() FILE *fp1,*fp2; char str20,srcName20,desName20; gets(srcName);gets(desName); if(fp1=fopen(srcName,r)=NULL) printf(file1 openned error.n); exit(0); if(fp2=fopen(desNa
14、me,w)=NULL) printf(file2 created error.n); exit(0); while(fgets(str,20,fp1)!= NULL) fputs(str,fp2); fclose(fp1); fclose(fp2); return 0;22#include #include int readFile( char lines 80);void writeFile(char lines 80, int n );main( ) int choice, num; char lines10080; do /*显示菜单*/ printf(n = MENU =n); pri
15、ntf(n read file.1); printf(n write file.2); printf(n exit.3); printf(n select:); scanf(“%d,&choice); getchar(); /*用户选择*/ if (choice=1)num = readFile(lines); if (choice=2) writeFile(lines, num);while (choice!=3);例3:P214例6-1323int readFile(char lines 80) * 读文件*/ int i; FILE *fp; char filename30; print
16、f(“nEnter file name:); /* 输入要进展写操作的文件名*/ gets(filename); if(fp=fopen(filename,“r)=NULL) /* 翻开文件*/ printf(Cannot open file!); return 0; for (i=0; !feof(fp); i+) /* 读取并显示文件*/ fgets(&linesi0, 80, fp); puts(&linesi0); fclose(fp); return i;24void writeFile(char lines 80, int n) /* 写文件 */ FILE *fp; char f
17、ilename30; printf(“nEnter file name:); /* 输入要进展写操作的文件名*/ gets(filename); if(fp=fopen(filename, “w) = NULL) /* 翻开文件*/ printf(Cannot open file!); return; while( n!=0 ) fputs(&lines-n0, fp); /*写出一行字符串*/ fprintf(fp,n); fclose(fp); /* 封锁文件 */253文件的操作4数据块读写操作 1、 fread( )的调用格式: fread(buffer, size, count, f
18、p); 例如:fread(buffer, sizeof(int), 5, fp); ;语句功能是:从fp所指的文件中读取5块数据并放在buffer中,每块数据的大小为int类型占用的字节数量。2、 fwrite ( )的调用格式: fwrite(buffer, size, count, fp); 例如: fwrite(buffer, sizeof(float), 5, fp) ;语句功能是:将buffer中存放的数据写入fp所指的文件中,共写入5块数据,每块数据的大小为float类型占用的字节数量。 输入输出的内容都为二进制方式263文件的操作4例4:从键盘输入学生根本信息,写入二进制文件;再
19、从该文件中读取学生根本信息,并显示输出。 问题分析假设学生根本信息只包含学号、姓名、所属院系和专业几个数据项,为此,需求定义一个构造类型。输入学生信息的时候,将一切数据项存放在一个构外型变量中,并以二进制的方式写入文件;在读取文件的时候,每次读取一个构造类型变量的字节数目,这样可以很轻松地实现将构外型数据存储到磁盘文件中的操作。 27#include #define NUM 30typedef struct info /* 表示学生根本信息的构造类型 */ int No; /* 学号 */ char name16; /* 姓名 */ char department32; /* 所属院系 */
20、char major32; /* 所学专业 */ INFO;28int main( ) INFO s; int i; FILE *fp; char filename32; printf(nEnter filename:); /* 输入文件名 */ gets(filename); if (fp=fopen(filename, wb) = NULL) /* 以二进制写方式翻开文件 */ printf(Cannot open %s file., filename); return 1; 29for (i=0; iNUM; i+) /* 经过键盘输入学生信息并写入文件 */ scanf(%d%s%s%
21、s, &s.No, , s.department, s.major); fwrite(&s, sizeof(INFO), 1, fp); fclose(fp); /* 封锁文件 */ if (fp=fopen(filename, rb) = NULL) /* 以二进制读方式翻开文件 */ printf(nCannot open %s file., filename); return 1; while (fread(&s, sizeof(INFO), 1, fp) /* 从文件中读信息并显示输出 */ printf(n%4d%16s%20s%20s, s.No, , s.
22、department, s.major); fclose(fp); /* 封锁文件 */ return 0;303文件的操作4格式化读写操作 1、 fscanf( )的调用格式: fscanf(文件指针,格式字符串,输入列表); 例如: fscanf(fp, %d%f, &i, &j) ;语句功能是:从fp所指的文件中按照格式控制的描画读取一个整型数值给i,一个单精度数值给j。2、 fprintf ( )的调用格式: fprintf(文件指针,格式字符串,输出列表); 例如: fprintf(fp, %d%f, i, j);语句功能是:将i、j的内容按照格式控制的描画写入fp所指的文件中。 输
23、入输出的内容都为ASCII码值制方式留意:用fprintf和fscanf函数对磁盘文件读写,运用方便,容易了解,但由于在输入时要将ASCII码转换为二进制方式,在输出时又要将二进制方式转换成字符,破费时间比较多。因此,在内存与磁盘频繁交换数据的情况下,最好不用fprintf和fscanf函数,而用fread和fwrite函数。313文件的操作4例5:从键盘输入一个源文件的称号和一个目的文件的称号,在源文件中存放了一个计算式(留意没有空格). 例如1+2 程序的功能是从源文件中读取该式,并计算其结果,将式子和结果以如下款式输出 1+2=332#include int main() FILE *f
24、p1, *fp2; char srcName20,desName20,op; float src1,src2,result; printf(请输入源文件名:n); gets(srcName); printf(请输入目的文件名:n); gets(desName); if(fp1=fopen(srcName,r)=NULL) printf(file1 openned error.n); exit(0); if(fp2=fopen(desName,w)=NULL) printf(file2 created error.n); exit(0); fscanf(fp1,%f%c%f,&src1,&op,
25、&src2); 33 switch(op) case +: result=src1+src2; break; case -: result=src1-src2; break; case *: result=src1*src2; break; case /: result=src1/src2; fprintf(fp2,%f%c%f=%f,src1,op,src2,result); fclose(fp1); fclose(fp2); return 0;34#include #define NUM 30typedef struct info /* 表示学生根本信息的构造体类型*/int No;cha
26、r name16;char department32;char major32;INFO;例6:P219 例6-1535main( )INFO s;int i;FILE *fp;char filename32;printf(“nEnter file name:); /* 输入文件名 */gets(filename); /* 以写方式翻开文件*/if (fp=fopen(filename, w) = NULL) printf(nCannot open %s file., filename);return 1;36 /* 按照格式控制输入学生信息并写入文件*/ for (i=0; iNUM; i+
27、) printf(n Enter No, name, department, major); scanf(%d%s%s%s, &s.No, , s.department, s.major); fprintf(fp, %d %s %s %sn, s.No, , s.department, s.major); fclose(fp); /* 封锁文件 */ if (fp=fopen(filename, “r)=NULL) /* 以读方式翻开文件*/ printf(nCannot open %s file.,filename); return 1; while (!feof(f
28、p) /* 按格式控制从文件读取并显示*/ fscanf(fp, %d%s%s%sn, &s.No, , s.department, s.major); printf(n%4d%16s%20s%20s, s.No, , s.department, s.major); fclose(fp); /* 封锁文件 */373课堂练习5知在一个resouce.txt文件中,第一行放了一个,表示第二行放的数的个数 例如:对该文件的第二行中的一切数据求和,保管在文件result.txt#include int main( )int i,n=0,m,sum=0;FILE *fp;if
29、(fp=fopen(k:2021-2021-2cresouce.txt, r) = NULL) printf(nCannot openfile.);return 1;fscanf(fp,%d,&n);printf(n=%dn, n);for (i=0; in; i+) fscanf(fp,%d, &m);sum+=m;printf(sum=%dn, sum);fclose(fp); if (fp=fopen(k:2021-2021-2cresult.txt, w) = NULL) printf(nCannot openfile.);return 1;fprintf(fp,%d, sum);fclose(fp);return 0; 38顺序读写:位置指针按字节位置顺序挪动。随机读写:读写完上一个字符字节后,并不一定要读写其后续的字符字节,而可以读些文件中恣意位置上所需求的字符字节。1.文件位置指针的定位C言语提供以下有关函数使位置指针指向指定的位置:(1)rewind函数函数功能:是使位置指针重新前往文件的开头,此函数没有前往值。 3数据文件的随机读写539例:有一个磁盘文件,第一次将它的内容显示在屏幕上,第二次把它复制到另一文件上。 #include main()FI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云南省楚雄州2022-2023学年高二下学期语文期末试卷(含答案)
- 2025农田地承包合同样本
- 2025各类加工合同范本
- 2025标准汽车买卖合同范本
- 2025如何认定农村土地承包合同的效力
- 2025建筑施工设备租赁合同范本
- 2025广州房屋租赁合同范本2
- 2025简约农业合作合同范本
- 《慢性便秘解析与自我管理》课件
- 《探索人生意义》课件
- 数控回转工作台设计-毕业论文(含全套CAD图纸)
- 飞机结构件制造工艺演示文稿
- 体外诊断试剂的应急预案
- 饲料厂各岗位操作规程
- 中医病证诊断疗效标准
- 煤焦油加氢主要化学反应
- 社会主义核心价值观与中华传统文化
- 4M1E确认检查表模板
- 先天性心脏病诊断治疗指南
- 漏电保护器日常检查记录表
- 煤矿的防治水保障体系健全
评论
0/150
提交评论