




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 第十一章第十一章 文文 件件考点:缓冲文件系统(即高级磁盘I/O系统)文件类型指针(FILE)文件的打开(fopen()和关闭(fclose()文件的读写(fputc(),fgetc(),fgets(),fputs(),fread(),fwrite(),fscanf()与与fprintf()文件的定位(fseek(),rewind()文件出错函数(ferror()11.1 C语言文件的概念语言文件的概念计算机存储数据是以文件的形式来存放的。按数据的存放形式可以分为计算机存储数据是以文件的形式来存放的。按数据的存放形式可以分为文本文件文本文件和和二进制文件二进制文件。二进制存取速度快二进制存取
2、速度快。对文件的读写操作称对文件的读写操作称“存取方式存取方式”,C中中,对文件的存取是以字符为单位对文件的存取是以字符为单位,这种文件这种文件被称作被称作“流式流式”文件,其存取方式有两种:文件,其存取方式有两种:顺序存取顺序存取和和直接存取。直接存取。文件类型指针变量都是指向文件的。文件类型指针变量都是指向文件的。在在C语言中,如何来对文件进行读写操作?语言中,如何来对文件进行读写操作?1、通过文件指针。、通过文件指针。2、通过文件操作函数。、通过文件操作函数。FILE * 指针变量名表指针变量名表二、定义文件指针二、定义文件指针FILE *fp1,*fp2,*fp3;一、文件指针概念一、
3、文件指针概念象操作象操作word文件一样,增加或删除文件的字符。文件一样,增加或删除文件的字符。fopen (“文件名文件名”,“文件使用方式文件使用方式”)FILE *fp;fp=fopen(“d:a1.txt”,“r”);a1为当前目录下存在的文件,为当前目录下存在的文件,r指使用的文件为指使用的文件为“读入读入”。打开成功。打开成功,返回一个指返回一个指向文件的指针给向文件的指针给fp,若打开失败若打开失败,返回空返回空NULL或或0给给fp。这样就使。这样就使fp指针与文件指针与文件a1建立了联系。建立了联系。 在对文件进行读、写操作之前,程序要跟文件联系起来,在在对文件进行读、写操作
4、之前,程序要跟文件联系起来,在C语言中,可以通过语言中,可以通过调用库函数调用库函数fopen( )来来“打开打开”文件或创建文件或创建“文件文件”。fopen()函数的一般形式为:函数的一般形式为:三、文件操作函数三、文件操作函数1、文件的打开、文件的打开fopen( )2、文件关闭、文件关闭fclose( )当文件的读、写操作完成之后,必须将它关闭,关闭文件可调用库函数当文件的读、写操作完成之后,必须将它关闭,关闭文件可调用库函数fclose( )来实现,来实现,fclose(fp)通过通过fp把打开的文件关闭,即:把打开的文件关闭,即:fp不再指向所打开的文件,不再指向所打开的文件,若成
5、功关闭返回若成功关闭返回0, 否则返回非否则返回非0。文件的使用格式文件的使用格式例例1 以下可作为函数以下可作为函数fopen中第一个参数的正确格式是:中第一个参数的正确格式是:A)c:usertext.txt B)c:usertext.txt C)“c:usertext.txt” D)“c:usertext.txt”例例3 若若fp已正确定义为一个文件指针,已正确定义为一个文件指针,d1.dat为二进制文件,请填空,以便为二进制文件,请填空,以便为为“读读”而打开此文件:而打开此文件:fp=fopen( 1 ) (0903)以下程序用来判断指定文件是否能正常打开,请填空#includema
6、in()FILE*fp;if(fp=fopen(“test.txt”,”r”)=【13】)printf(“未能打开文件!n”);elseprintf(“文件打开成功!n”);NULLNULL“d1.dat”,”rb”“d1.dat”,”rb”例例2 、设有定义:、设有定义:FILE *fw;,请将以下打开文件的语句补充完整,以便可以向文请将以下打开文件的语句补充完整,以便可以向文本文件本文件readme.txt的最后续写内容。的最后续写内容。fw=fopen(“readme.txt”, );“a+”例例4 如下程序段是把:从键盘输入的文本原样输出到名为如下程序段是把:从键盘输入的文本原样输出到
7、名为file1.dat的文件的文件中,在中,在 中填入正确答案中填入正确答案#include main() FILE *fpout; char ch;if(fpout=fopen(“file1.dat”, )= =NULL)ch=getchar();while (ch!=)fputc(ch,fpout); ch=getchar(); fclose(fpout);A)”rb” B)”w” C)”wb” D)”r+”“w”格式:fputc(ch,fp),若成功返回所输出的字符返回所输出的字符,否则返返回回EOF值,值,EOF值是在值是在stdio.h库函数中定义的常量,库函数中定义的常量,其值为其
8、值为-1。把字符把字符a写入写入aa.txt文件中文件中例:例:FILE *fp;fp=fopen(“d:aa1.txt”,“w”); ;fputc(a,fp);从指定的文件中读取一个字符给变量,这个文件必须以读从指定的文件中读取一个字符给变量,这个文件必须以读或写的方式打开。或写的方式打开。 从文件从文件aa1.txt中读一个字符给变量中读一个字符给变量ch例:例:char ch;FILE *fp;fp=fopen(“d:aa1.txt”,“w”); ;ch=fgetc(fp);(1)假定当前盘符下有两个如下文本文件)假定当前盘符下有两个如下文本文件: 文件名文件名 a1.txt a2.tx
9、t 内容内容 123# 321# 则下面程序段执行后的结果为则下面程序段执行后的结果为 #include stdio.h void fc(FILE *p) char c; while(c=fgetc(p)!=#) putchar(c); main() FILE *fp; fp=fopen(a1.txt,r); fc(fp); fclose(fp); fp=fopen(a2.txt,r); fc(fp); fclose(fp); putchar(n); A.)123321 B).123 C).321 D).以上答案都不正确以上答案都不正确(0803)以下程序从名为filea.dat的文本文件中逐
10、个读入字符并显示在屏幕上。请填空#includemain()FILE*fp;charch;fp=fopen(【15】);ch=fgetc(fp);whlie(!feof(fp)putchar(ch);ch=fgetc(fp);putchar(n);fclose(fp);“filea.dat”,”r”其格式为:其格式为:fgets(str,n,fp);从从fpfp所指的文件中读入所指的文件中读入n-1n-1个字符放入个字符放入strstr中,如中,如果在未读满果在未读满n-1n-1个字符时,已读到一个换行符或一个个字符时,已读到一个换行符或一个EOF (EOF (文件结束标志文件结束标志),),
11、则结束则结束本次读操作,读入的字符包括最后读到的换行符,读入结束后系统自动加本次读操作,读入的字符包括最后读到的换行符,读入结束后系统自动加00。若成功返回字符串的指针,出错时返回若成功返回字符串的指针,出错时返回NULLNULL。从文件从文件aa1.txt中读取中读取9个字符存入数组个字符存入数组str10例例:char str10;FILE *fp;fp=fopen(“d:aa1.txt”,“r”); ;fgets(str,10,fp) 1. 已有文本文件test.txt,其中的内容为:How are you?。以下程序中,文件test.txt已正确为“读”而打开,由此文件指针fr指向文件
12、,则程序的输出结果是【1】。#include main() FILE *fr; char str40;.fgets(str,8,fr);printf(%sn,str);fclose(fr); How are把数组把数组str中的内容写入文件中的内容写入文件aa1.txt中中fputs(str,fp);fputs(str,fp);strstr可以字符串,数组名,指向字可以字符串,数组名,指向字符串的指针。若成功返回非符串的指针。若成功返回非0 0值,否则返回值,否则返回0 0。fputsfputs函数的特点:输出字符串时,文件中各字符串将首尾相接,它们之间没函数的特点:输出字符串时,文件中各字符
13、串将首尾相接,它们之间没有任何间隔符,为了便于读入,在输出字符串时,应当注意人为的加入有任何间隔符,为了便于读入,在输出字符串时,应当注意人为的加入”n”n”字字符串等。符串等。例:char str10=”how are you”;FILE *fp;fp=fopen(“d:aa1.txt”,“w”);fputs(str,fp);(07)、有以下程序)、有以下程序#include “stdio.h”void WriteStr(char *fn,char *str) FILE *fp; fp=fopen(fn,“W”); fputs(str,fp); fclose(fp);main() Write
14、Str(“t1.dat”,“start”); WriteStr(“t1.dat”,“end”);程序运行后程序运行后,文件文件t1.dat中的内容是中的内容是 A).start B.) endC).startend D).endrt用来读、写一个数据块,其调用格式为:用来读、写一个数据块,其调用格式为: fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); 说明:说明:buffer:是数据块的地址(即指针),对fread来说,它是一个内存块的首地址,输入的数据存入内存块中,对fwrite来说,它是准备输出的数据块的起始地址。siz
15、e:表示每个数据块的字节数。count:用来指定每读或每写一次,输入输出数据块的个数,每个块数据具有size个字节,fp为文件指针。 如果文件以二进制形式打开,用fread和fwrite函数就可以读写任何类型的信息 fread( )与与fwrite()例例1 1 float str20; FILE *fp; fp=fopen(test.t,wb); fread(str,4,2,fp);其中str是数组名,数组中的每个元素占4个字节,从fp指向的文件test.t中取两次数据,每次4个字节,存到数组str中。 例例2.struct student int num; float score; cha
16、r name9; a;FILE *fp;fp=fopen(test.t,wb); fwrite(&a,sizeof(struct student),1,fp); 表示从结构体变量a的首地址开始输出数据,每个数据块含有sizeof(struct student)个字节,输出一个数据块。(0803)已知函数的调用形式为)已知函数的调用形式为fread(buf,size,count,fp),参数参数buf的含义是的含义是 A)一个整型变量一个整型变量,代表要读入的数据项总数代表要读入的数据项总数 B)一个文件指针一个文件指针,指向要读的文件指向要读的文件 C)一个指针一个指针,指向要读入数据
17、的存放地址指向要读入数据的存放地址 D)一个存储区一个存储区,存放要读的数据项存放要读的数据项(0809) 有以下程序有以下程序#include main()FILE *pf; char *s1=China, *s2=Beijing; pf=fopen(abc.dat,wb+); fwrite(s2,7,1,pf); rewind(pf); /*文件位置指针回到文件开头文件位置指针回到文件开头*/ fwrite(s1,5,1,pf); fclose(pf); 以上程序执行后以上程序执行后abc.dat文件的内容是文件的内容是 A). China B.) Chinang C).ChinaBeij
18、ing D). BeijingChina(0709)有以下程序 #include main() FILE *fp; int a10=1,2,3,0,0,i; fp=fopen(d2.dat,wb); fwrite(a,sizeof(int),5,fp); fwrite(a,sizeof(int),5,fp); fclose(fp); fp=fopen(d2.dat,rb); fread(a,sizeof(int),10,fp); fclose(fp); for(i=0;i10;i+) printf(%d,ai); 程序的运行结果是 A).1,2,3,0,0,0,0,0,0,0, B).1,2,
19、3,1,2,3,0,0,0,0, C).123,0,0,0,0,123,0,0,0,0, D.)1,2,3,0,0,1,2,3,0,0, Dfprintf(文件指针文件指针,格式字符串,输出表列格式字符串,输出表列)fscanf(文件指针文件指针,格式字符串,输入表列格式字符串,输入表列)例例: FILE *fp;fp=fopen(“d:aa1.txt”,“w”);int i=5;float t=56.278;fprintf(fp,”%d,%6.2f”,i,t);表示将表示将i及及t的值按的值按%d,%6.2f的格式输出到的格式输出到fp所指向的文件所指向的文件(文件有文件有5, 56.28)
20、fprintf(stdout,”%d,%6.2f”,i,t)与与printf(“%d,%6.2f”,i,t)等价。等价。stdout表示显示器表示显示器例例 FILE *fp;fp=fopen(“d:aa1.txt”,“r”);int i;float t;fscanf(fp,”%d,%f”,&i,&t);10. 若若aa1.txt文件中有整数文件中有整数10,实数实数4.6则把则把10给给i,4.6给给t; fscanf(stdin,“%d,%f”,i,t)与与scanf(%d,%f”,i,t)等价。等价。stdin表示键盘表示键盘 (0903)有以下程序#include ma
21、in() EILE *f; f=fopen(“filea.txt”,”w”); fprintf(f,”abc”); fclose(f);若文本文件filea.txt中原有内容为:hello,则运行以上程序后,文件filea.txt中的内容为A) helloabc B)abclo C)abc D)abchello例例 有以下程序有以下程序 #include main() FILE *fp; int i=20,j=30,k,n; fp=fopen(d1.dat,w); fprintf(fp,%dn,i);fprintf(fp,“%dn”,j); fclose(fp); fp=fopen(“d1.d
22、at”,“r”); fscanf(fp,“%d%d”,&k,&n); printf(“%d%dn”,k,n); fclose(fp); 程序运行后的输出结果是_。 A)20 30 B)20 50 C)30 50 D)30 20 CA调用形式调用形式 rewind(pf)无返回值,函数的功能是使文件的位置指针回到文件的开头无返回值,函数的功能是使文件的位置指针回到文件的开头3.rewind( )函数 几个常用的指针操作函数 获取文件内部的当前指针获取文件内部的当前指针利用利用ftell()函数获得文件指针的当前位置,函数返回当前位置指针相对于文件开函数获得文件指针的当前位置,函数
23、返回当前位置指针相对于文件开头的字节数,其函数调用形式为:头的字节数,其函数调用形式为: long t; t=ftell(fp); 当函数出错时,函数返回当函数出错时,函数返回-1L。2.feof( )判断文件结束函数,判断文件结束函数,如果遇到文件结束,函数如果遇到文件结束,函数feof的值为的值为1,否则为,否则为0。feof函函数即可以判断二进制文件又可以判断文本文件。数即可以判断二进制文件又可以判断文本文件。 1.ftell( )函数 4.fseek() 移动文件指针移动文件指针其调用格式:其调用格式:fseek(文件指针文件指针, 位移量位移量,起始点起始点) 起 始 点 名 字 用
24、数字代表文件开始SEEK_SET 0文件当前位置SEEK_CUR 1文件末尾SEEK_END 2“位移量”指以起始点为“基点”,向前移动的字节数,标准c要求位移量是long型数据,规定在数字的末尾加一个字母L,就表示是long。例如:例如:fseek(fp,100L,0) 将指针从文件的头部移到离头部将指针从文件的头部移到离头部100个字节处。个字节处。fseek(fp,50L,1) 将指针移到离当前位置将指针移到离当前位置50字节处。字节处。fseek(fp,-200L,2); 将指针从文件末尾向后退将指针从文件末尾向后退200个字节。个字节。例例1利用利用fseek函数可实现的操作函数可实
25、现的操作)改变文件的位置指针 )文件的的顺序读写 C)文件的随机读写 D)以上答案都正确例例2 fseek函数的正确调用形式为:函数的正确调用形式为:)fseek(fp,位移量,起始点) )fseek(位移量,起始点,fp) C)fseek(文件指针,位移量,起始点) D)fseek(起始点, 位移量,文件指针)3、以下与函数、以下与函数fseek(fp,0L,SEEK_SET)有相同作用的是有相同作用的是 A)feof(fp) B)ftell(fp)C)fgetc(fp) D)rewind(fp)SEEK_SET:文件开始SEEK_CUR:文件当前位置SEEK_END:文件末尾(0604)执
26、行以下程序后,test.txt文件的内容是(若文件能正常打开) #include main()FILE *fp;char *s1=Fortran,*s2=Basic;if(fp=fopen(test.txt,wb”)=NULL)printf(Cant open test.txt filen);exit(1);fwrite(s1,7,1,fp); fseek(fp,0L,SEEK_SET); fwrite(s2,5,1,fp);fclose(fp);A.)Basican B).BasicFortran C).Basic D).FortranBasicA(0803)有以下程序的运行结果是#includemain()FILE*fp;inta10=1,2,3,i,n;fp=fopen(“dl.dat”,”w”);for(i=0;i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 借款变更合同范例
- 丸剂药品购买合同范例
- 供电缴费合同范例
- 体温枪合同范例
- 土地轮作合作协议与农业生产技术交换合同书
- 范本技术咨询合同10篇
- 企业咨询顾问合同5篇
- 2025年委托中介合同6篇
- 西瓜种子购销合同协议
- 装载机单车租赁合同协议
- 人工智能引论智慧树知到课后章节答案2023年下浙江大学
- 小班数学《图形食品品尝会》
- 12 黑板报(教案) 赣美版美术三年级下册
- 大学英语六级经典必背500句
- 2022神经外科手术分级目录
- 管理系统中计算机应用详细课件
- 房建项目检验和试验计划
- 脊髓损伤患者的坐起坐位及坐位平衡训练
- 夯实基础总结反思课件高三学习主题班会
- 《上海市奉贤区小区机动车停放管理工作调查报告》4300字
- 湖南裕能招股说明书梳理
评论
0/150
提交评论