版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章文件操作9.1文件操作相关概念9.2C语言的文件操作 程序设计基础1第9章文件操作教学目标了解文件的概念。了解C语言的文件系统。掌握文件的操作方法。
程序设计基础29.1.1文件文件是指存储在外部介质(如磁盘)上的数据的集合,可以是C语言源程序文件*.c、目标程序文件*.obj、可执行程序文件*.exe等,也可以是一组待输入处理的原始数据,或是一组输出的结果。源程序文件、目标程序文件、可执行程序文件可称为程序文件,输入、输出数据可称为数据文件。文件包括磁盘文件和外部设备文件。9.1文件操作相关概念程序设计基础3根据文件中数据的存储形式,文件分为文本文件(又称字符文件或ASCII码文件)和二进制文件。文本文件是以字符ASCII码值进行存储的文件,其内容就是字符,每个字符占用一个字节来存放该字符的ASCII码值。例整数218用3个字节存储字符‘2’‘1’‘8’的ASCII码值特点:能够读懂其内容,读写速度较慢。二进制文件是按照数据在内存中的状态进行存储的文件。例整数218存储的是其补码形式:0000000011011010特点:不能读懂其内容,节省存储空间并且读写速度较快。9.1.2文件的种类程序设计基础49.1.3缓冲文件系统程序设计基础内存缓冲区512字节磁盘由操作系统自动完成程序控制C程序……5在对文件进行操作时,需要记录文件的相关信息,C语言编译器使用FILE结构体来存放文件的相关信息。FILE结构体类型称为文件类型,由系统在头文件stdio.h中定义。C程序中,通过FILE类型的指针对文件进行操作,每个正在使用的文件均要定义一个FILE类型的结构体指针变量。定义形式:FILE*指针变量名;注意:FILE应为大写形式例FILE*fp;9.1.4文件类型指针程序设计基础6C语言文件操作的三个步骤:(1)打开文件。(2)对文件进行读写操作。(3)关闭文件。9.2C语言的文件操作程序设计基础7一般形式为:fopen(文件名,文件打开方式);若文件成功打开,返回被打开文件的文件指针;若打开文件失败,返回NULL,表示打开操作不成功。9.2.1文件的打开程序设计基础例FILE*fp1;
fp1=fopen("test.txt","r");例FILE*fp2;fp2=fopen("D:\\ch9\\test.txt","w");8打开文件的作用:(1)分配给打开文件一个FILE类型的文件结构体变量,并将有关信息填入文件结构体变量。(2)开辟一个缓冲区。(3)调用操作系统提供的打开文件或建立新文件功能,打开或建立指定文件。9.2.1文件的打开程序设计基础9文件的打开方式9.2.1文件的打开程序设计基础文件的打开方式含义文件不存在时表现文件已存在时表现r(只读)只读打开一个字符文件,只允许读数据返回NULL返回文件指针w(只写)只写打开或建立一个字符文件,只允许写数据新建一个文件返回指针覆盖文件重建新文件a(追加)追加打开一个字符文件,并在文件末尾写数据新建一个文件返回指针返回文件指针rb(只读)只读打开一个二进制文件,只允许读数据返回NULL返回文件指针wb(只写)只写打开或建立一个二进制文件,只允许写数据新建一个文件返回指针覆盖文件重建新文件ab(追加)追加打开一个二进制文件,并在文件末尾写数据新建一个文件返回指针返回文件指针r+(读/写)读/写打开一个字符文件,允许读和写返回NULL返回文件指针w+(读/写)读/写打开或建立一个字符文件,允许读和写新建一个文件返回指针覆盖文件重建新文件a+(读/写)读/写打开一个字符文件,允许读,或在文件末尾追加数据新建一个文件返回指针返回文件指针rb+(读/写)读/写打开一个二进制文件,允许读和写返回NULL返回文件指针wb+(读/写)读/写打开或建立一个二进制文件,允许读和写新建一个文件返回指针覆盖文件重建新文件ab+(读/写)读/写打开一个二进制文件,允许读,或在文件末尾追加数据新建一个文件返回指针返回文件指针10常用的打开文件的判断程序段如下:if((fp=fopen("test.txt","r"))==NULL){
printf("\nCannotopentest.txt!\n");
getch();
exit(1);}9.2.1文件的打开程序设计基础11一般形式为:fclose(文件指针变量名);关闭文件的作用是:(1)对缓冲区进行检查,看是否有还没写入文件的数据,若有,将这些数据写到文件中,因此,文件用完必须要关闭,否则可能会丢失数据。(2)释放文件缓冲区和FILE变量。9.2.2文件的关闭程序设计基础12常用的文件读写函数9.2.3文件的读写操作程序设计基础函数名功能读写方式fgetc从文件中读取一个字符文本方式fputc写一个字符到文件中去文本方式fgets从文件中读取一个字符串文本方式fputs写一个字符串到文件中去文本方式fscanf格式化读取文件中数据文本方式fprintf向文件中写入格式化数据文本方式fread从文件中读取数据块二进制方式fwrite写数据块到文件中去二进制方式13文件位置指针:指向文件当前读写字节的指针,在文件打开时,指向文件的第一个字节,随着文件的读写,会自动后移。注意:文件位置指针位于文件内部,用于标注文件的当前读写位置,随着读写操作会自动后移,由系统自动设置,不需要在程序中定义;文件指针与整个文件相关联,需在程序中定义,只要不重新赋值,文件指针的值是不变的。9.2.3文件的读写操作程序设计基础141.fputc()一般形式为:fputc(ch,fp);ch:字符常量或字符变量功能:把ch中的字符写入由fp指定的文件中去。返回值:如果写入操作执行成功,返回ch的ASCII码值;否则,返回EOF。
9.2.3文件的读写操作程序设计基础151.fputc()【例9.1】从键盘输入一行字符串,写入到磁盘文件file1.txt中。#include<stdio.h>#include<stdlib.h>#include<conio.h>main(){FILE*fp;charch;if((fp=fopen("file1.txt","w"))==NULL){printf("\nCannotopenfile!\n");getch();exit(1);}
9.2.3文件的读写操作程序设计基础运行结果:yesterdayoncemore↙while((ch=getchar())!='\n')
fputc(ch,fp);fclose(fp);}161.fputc()注意:用fputc()写入的文件可以用“写”、“读写”或“追加”三种方式打开。若以“写”或“读写”方式打开一个不存在的文件,会以指定的文件名建立一个新文件,并从文件开头开始写入字符;若以“写”或“读写”方式打开一个存在的文件,文件中原有内容会被删除,从文件开头开始写入字符;若以“追加”方式打开文件,该文件必须存在,从文件末尾开始写入字符。9.2.3文件的读写操作程序设计基础172.fgetc()一般形式为:ch=fgetc(fp);ch:字符变量功能:从fp所指向的文件中读取一个字符并把它赋给字符变量ch。返回值:如果读取操作执行成功,返回读取字符的ASCII码值;否则,返回EOF。9.2.3文件的读写操作程序设计基础182.fgetc()例9.2】将文件file1.txt中的内容显示在屏幕上。#include<stdio.h>#include<stdlib.h>#include<conio.h>main(){FILE*fp;charch;if((fp=fopen("file1.txt","r"))==NULL){printf("\nCannotopenfile!\n");getch();exit(1);}9.2.3文件的读写操作程序设计基础运行结果:yesterdayoncemorewhile((ch=fgetc(fp))!=EOF)
putchar(ch);fclose(fp);
}注意:使用fgetc()函数调用前,需要读取的文件必须是以读或读写方式打开的,并且该文件应该已经存在。193.fputs()一般形式为:fputs(str,fp);str:字符数组名、字符指针变量或字符串常量功能:把字符串常量或以str为首地址的字符串写入fp所指向的文件中去,字符串结束标志'\0'被自动舍去,不被写入。返回值:如果写入操作执行成功,返回0;否则,返回EOF。9.2.3文件的读写操作程序设计基础203.fputs()【例9.3】将从键盘上输入的4行字符串写入磁盘文件file2.txt中。#include<stdio.h>#include<stdlib.h>#include<conio.h>main(){
FILE*fp;
inti;
charstr[80];
if((fp=fopen("file2.txt","w"))==NULL)
{
printf("\nCannotopenfile!\n");
getch();
exit(1);
}9.2.3文件的读写操作程序设计基础for(i=1;i<=4;i++)
{
gets(str);
fputs(str,fp);
fputs("\n",fp);
}
fclose(fp);}运行结果:IlikespringbecauseIlikewarmwind.↙IlikesummerbecauseIlikeicecream.↙IlikeautumnbecauseIlikefreshapples.↙IlikewinterbecauseIlikemakingsnowman.↙214.fgets()一般形式为:fgets(str,n,fp);str:字符数组名n:正整数功能:从fp所指向的文件中读取长度不超过n-1个字符的字符串,将读取的字符串存入字符数组str中。读取结束后,在字符数组str中的字符串末尾自动加上字符串结束标志‘\0’。如果在读满n-1个字符之前遇到换行符‘\n’或文件结束标志EOF,读取提前结束,并将换行符'\n'作为一个字符送入str中。返回值:如果读取操作执行成功,返回字符数组str的首地址,即str的值;否则,返回NULL。9.2.3文件的读写操作程序设计基础224.fgets()【例9.4】将文件file2.txt中的内容显示在屏幕上。#include<stdio.h>#include<stdlib.h>#include<conio.h>main(){
FILE*fp;
charstr[80];
if((fp=fopen("file2.txt","r"))==NULL)
{
printf("\nCannotopenfile!\n");
getch();
exit(1);
}9.2.3文件的读写操作程序设计基础while(fgets(str,80,fp)!=NULL)
printf("%s",str);
fclose(fp);;}运行结果:IlikespringbecauseIlikewarmwind.IlikesummerbecauseIlikeicecream.IlikeautumnbecauseIlikefreshapples.IlikewinterbecauseIlikemakingsnowman.235.fprintf()一般形式为:fprintf(fp,格式控制字符串,变量表列);格式控制字符串:写入数据的格式字符串变量表列:写入文件的变量表列,各变量之间用逗号分隔功能:将变量表列中的数据按照格式控制字符串指定的格式写入fp指向的文件。9.2.3文件的读写操作程序设计基础245.fprintf()【例9.5】将从键盘输入的三个数据按照指定格式写入磁盘文件file3.txt中。#include<stdio.h>#include<stdlib.h>#include<conio.h>main(){FILE*fp;charcdata[20];floatfdata;intidata;scanf("%s%f%d",cdata,&fdata,&idata);9.2.3文件的读写操作程序设计基础if((fp=fopen("file3.txt","w"))==NULL){
printf("\nCannotopenfile!\n");
getch();
exit(1);}fprintf(fp,"%s%8.1f%05d",cdata,fdata,idata);
fclose(fp);}运行结果:zknu_jsjxy2.536↙256.fscanf()一般形式为:fscanf(fp,格式控制字符串,变量地址表列);格式控制字符串:读取数据的格式字符串变量地址表列:要将数据存入其中的变量地址表列,各变量地址之间用逗号分隔功能:从由fp指定的文件中,按照格式控制字符串指定的格式,将数据读入到由变量地址表列所列出的相应变量中去。9.2.3文件的读写操作程序设计基础266.fscanf()【例9.6】将文件file3.txt中的内容以指定的格式显示在屏幕上。#include<stdio.h>#include<stdlib.h>#include<conio.h>main(){FILE*fp;charcdata[20];intidata;
floatfdata;if((fp=fopen("file3.txt","r"))==NULL){printf("\nCannotopenfile!\n");getch();exit(1);}9.2.3文件的读写操作程序设计基础fscanf(fp,"%s%8f%5d",cdata,&fdata,&idata);printf("%s%8.1f%05d",cdata,fdata,idata);fclose(fp);}运行结果:zknu_jsjxy2.500036277.fwrite()一般形式为:fwrite(buffer,size,count,fp);buffer:指针,指出要将其中数据写入到文件的缓冲区首地址size:一个数据块的字节数count:写入数据块的个数功能:按二进制形式将以buffer为首地址的数据缓冲区内的数据写入到fp所指定的磁盘文件中去,每次写入的数据块大小为size字节,共写count次。返回值:如果写入操作执行成功,返回实际写入数据块的个数,即count的值;否则,返回0。9.2.3文件的读写操作程序设计基础287.fwrite()【例9.7】公益活动志愿者是无私奉献、热心助人的爱心使者,秉承“送人玫瑰,手有余香”的互助理念,他们用实际行动传递温暖与正能量,为社会带来积极改变。将从键盘输入的五个公益活动志愿者信息写入到磁盘文件file.dat中。9.2.3文件的读写操作程序设计基础297.fwrite()#include<stdio.h>#include<stdlib.h>#include<conio.h>structvolunteer{intid;charname[50];intage;chartelephone[20];};main(){FILE*fp;structvolunteervt[5];inti;if((fp=fopen("file.dat","wb"))==NULL){printf("\nCannotopenfile!\n");getch();exit(1);}9.2.3文件的读写操作程序设计基础307.fwrite()9.2.3文件的读写操作程序设计基础printf("Pleaseinputinformation:\nidnameagetelephone\n");for(i=0;i<5;i++)scanf("%d%s%d%s",&vt[i].id,vt[i].name,&vt[i].age,vt[i].telephone);fwrite(vt,sizeof(structvolunteer),5,fp);fclose(fp); }运行结果:Pleaseinputinformation:idnameagetelephone315001zhangxiaopeng2011111111111↙315002liling1822222222222↙315003sunxia2533333333333↙315004zhaojuntao1944444444444↙315005wangqiming3055555555555↙318.fread()一般形式为:fread(buffer,size,count,fp);buffer:指针,指出从磁盘文件中读取的数据块在内存中存放的首地址size:一个数据块的字节数count:读取数据块的个数功能:按二进制形式从fp指定的磁盘文件中读取数据块,每次读取的数据块大小为size字节,共读count个,读取的数据块存放到以buffer为首地址的内存空间中。返回值:如果读取操作执行成功,返回实际读取数据块的个数,即count的值;否则,返回0。9.2.3文件的读写操作程序设计基础32
8.fread()【例9.8】将文件file.dat中的数据显示在屏幕上。structvolunteer{intid;charname[50];intage;chartelephone[20];};main(){FILE*fp;structvolunteervt[5];inti;if((fp=fopen("file.dat","rb"))==NULL){printf("\nCannotopenfile!\n");getch();exit(1);}9.2.3文件的读写操作程序设计基础33
8.fread()【例9.8】将文件file.dat中的数据显示在屏幕上。9.2.3文件的读写操作程序设计基础fread(vt,sizeof(structvolunteer),5,fp);printf("idnameagetelephone\n");for(i=0;i<5;i++)printf("%-10d%-15s%-5d%-10s\n",vt[i].id,vt[i].name,vt[i].age,vt[i].telephone);fclose(fp); }运行结果:idnameagetelephone315001zhangxiaopeng2011111111111315002liling1822222222222315003sunxia2533333333333315004zhaojuntao1944444444444315005wangqiming3055555555555341.fseek()一般形式为:fseek(fp,offset,base);offset:相对base的字节位移量,为long类型的数据,以base为基准,文件位置指针向文件尾部方向移动,offset为正,否则,offset为负base:文件位置指针移动的基准位置功能:将fp指向的文件中的文件位置指针移动到基于base的相对位置offset字节处。返回值:如果定位操作执行成功,返回0,否则返回一个非0值。9.2.4文件定位程序设计基础351.fseek()9.2.4文件定位程序设计基础base取值符号常量含义0SEEK_SET文件开头位置1SEEK_CUR文件当前位置2SEEK_END文件末尾位置例fseek(fp,10L,SEEK_SET);fseek(fp,-15L,1);fseek(fp,-20L,2);base取值注意:fseek()一般用于二进制文件,因为在字符文件中由于要进行转换,计算的位置可能会出现错误。362.rewind()一般形式为:rewind(fp);功能:使fp指向文件的文件位置指针重新指向文件的开头位置。9.2.4文件定位程序设计基础372.rewind()
【例9.9】从例9.7所建立的磁盘文件file.dat中读取指定的公益活动志愿者信息并显示。structvolunteer{ intid;charname[50];intage;chartelephone[20];};main(){ FILE*fp;structvolunteervt;intnum;longoffset;charch;if((fp=fopen("file.dat","rb"))==NULL){printf("\nCannotopenfile!\n");getch();exit(1);}9.2.4文件定位程序设计基础382.rewind()do{printf("\npleaseinputrecordnumber:");scanf("%d",&num);offset=(num-1)*sizeof(structvolunteer);rewind(fp);if(fseek(fp,offset,0)!=0){printf("cannotmovethere!\n");exit(1);}fread(&vt,sizeof(structvolunteer),1,fp);printf("id:%d\n",vt.id);printf("name:%s\n",);printf("age:%d\n",vt.age);printf("telephone:%s\n",vt.telephone);printf("continue(y/n)?");getchar();ch=getchar();}while(ch=='y'||ch=='Y'); fclose(fp);}9.2.4文件定位程序设计基础运行结果:pleaseinputrecordnumber:4id:315004name:zhaojuntaoage:19telephone:44444444444continue(y
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电焊钢结构考试题及答案
- 2025年税务师考试《税法一》试题与参考答案
- 2026年【汽车修理工(高级)】考试试卷及答案
- 关于2026年年会活动策划讨论函8篇范文
- 2026年新产品测试报告回复函(6篇)
- 食品追溯体系监管自查报告及整改措施
- 2026年合同条款争议解决商洽函(6篇)
- 2025陕西省C3本B本A本安全员考试题库及答案
- 2025年宁波市海曙区招聘社区专职工作者真题
- 2025年采购管理(采购质量验收)试题及答案
- picco监测与护理课件
- 福建省护理“三基”备考试题含答案
- 项目投资意向书格式范本(标准)
- DL-T5153-2014火力发电厂厂用电设计技术规程
- 《送东阳马生序》拼音版
- 预防压疮的预防及护理
- 货运车辆交通安全讲座课件
- 事故油池基坑开挖专项施工方案
- 学校供暖托管服务投标方案(技术标)
- 复发性胰腺炎
- 关于成立项目部安全生产领导小组的通知
评论
0/150
提交评论