C语言文件操作..课件

上传人:妈**** 文档编号:243015189 上传时间:2024-09-13 格式:PPT 页数:60 大小:3.60MB
返回 下载 相关 举报
C语言文件操作..课件_第1页
第1页 / 共60页
C语言文件操作..课件_第2页
第2页 / 共60页
C语言文件操作..课件_第3页
第3页 / 共60页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,1,第八章 文件,文件系统 概述,标准文件操作,2,、文件,文件是存储在外部存储介质上的信息的集合,。,每个文件有唯一的文件名(主名,.,后缀)来标识。计算机实现按名对文件进行读、写等有关操作。,广义上,操作系统将每一个与主机相联的输入输出设备都看作是文件。(显示器、打印机,是,输出文件,键盘是输入文件,)。,一、文件定义与分类,文件系统 概述,3,2,、文件的分类,(,1,)按存储介质,:,磁盘文件、磁带文件。,(,2,)按文件的内容:,(,从程序设计的角度看,),源程序、目标文件、可执行文件、数,据文件。,(,3,)按文件的编码方式(存储形式),:,文本文件、二进制文件。,4,二、,数据,文件的存储形式,1,、,字符文件(文本文件),:,每个字符用一个,ASCII,码,存储(即一个字符占一个字节)。,2,、,二进制文件,:,以数据在内存中的形式原样存于磁盘。,如:一个短整数,(,short,型,),,其二进制文件存储方式都是占,个字节;,而字符文件存储方式所占,字节数,该数的数字个数,。,int,型数,二进制文件,字符文件,126,字节,字节,1268,字节,字节,5,例如:,整数,1268,文本文件形式,1,的,ASCII,码,00110001,00110010,00110110,00111000,二进制文件形式,00000100,11110100,1268,的二进制,数,2,的,ASCII,码,6,的,ASCII,码,8,的,ASCII,码,6,三,.,标准文件系统、非标准文件系统,程序数据区,输出文件缓冲区,输入,输入文件缓冲区,输出,输入,磁盘,内存,非标准文件系统,:,不使用缓冲区的磁盘文件系统,标准,c,采用缓冲文件系统,其原理图如下,:,输出,7,4.,文件存取方式,在,C,语言中,文件的存取有两种方式:,(,2,)随机存取,(,1,)顺序存取,8,标准文件操作,一、 标准文件类型指针,每个被使用的文件都在内存中开辟一个区域,用来存放文件的有关信息。,这些信息是保存在一个结构体类型的变量中。该结构体类型是由系统定义的,取名为,FILE,。,1.,文件类型指针概述,9,typedef struct, short level;,unsigned flags;,char fd;,unsigned char hild;,short bsize;,unsigned char *buffer;,unsigned istemp;,short token;, FILE;,FILE,:,一个标准的标识符,但不是关键字,10,如,FILE *fp;,fp,是一个指向,FILE,类型结构体的指针变量,通过该结构体变量中的文件信息能够访问该文件,。,如果有,N,个文件,,,一般应设,N,个指针变量,,,使它们分别指向,N,个文件,(,确切地说,,,指向该文件的信息结构体,),,以实现对文件的访问,。,FILE *,指针变量标识符,;,2.,文件型指针变量的定义,11,标准文件操作的四个基本步骤:,1.,文件类型指针的定义,2.,打开标准文件,3.,标准文件的读或写的操作,4.,标准文件的关闭操作,12,打开文件,对文件进行读或写,关闭文件,文件的操作步骤,文件打开函数,文件读写函数,文件关闭函数,定义文件类型指针,指针定义,13,二,.,标准文件的打开,打开文件的含义,将文件信息从磁盘装入计算机内存,建立文件的各种有关信息,并使文件指针指向该文件,即建立文件类型指针与文件名之间的关联,.,2,.,文件的打开函数,: fopen,fp=,fopen(,文件名,,,使用文件方式,),;,函数原型,:,FILE *fopen(char *filename,char *mode);,14,FILE,类型指针,-,成功,NULL -,失败,fopen( ),函数的返回值应赋给一个,FILE,指针变量,,,否则,此函数的返回值就会丢失,导致无法对此文件进行操作,。,例如:,FILE *fp;,fp=fopen(,”,A1,”,”,r,”,);,以上语句表示:,要打开名字为,A1,的文件,使用文件,的,方式为“读入”,,fp,指向,A1,文件,。,返回值,:,15,文件打开函数的调用给编译系统的三个信息:,1.,需要打开的文件名,;,2.,使用文件的操作方式,;,3 .,让哪一个指针变量指向被打开的文件,。,16,”,r,”,(只读) 为输入打开一个文本文件,”,w,”,(只写) 为输出打开一个文本文件,”,a,”,(追加) 向文本文件尾增加数据,”,rb,”,(只读) 为输入打开一个二进制文件,”,wb,”,(,只写) 为输出打开一个二进制文件,”,ab,”,(追加) 向二进制文件尾增加数据,3. C,语言文件操作方式,r: read , w: write , a: append , b:binary ,+:,读写,17,”,r+,”,(读写) 为读,/,写打开一个文本文件,”,w+,”,(读写) 为读,/,写建立一个新的文本文件,”,a+,”,(读写) 为读,/,写打开一个文本文件,”,rb+,”,(读写) 为读,/,写打开一个二进制文件,”,wb+,”,(,读写) 为读,/,写建立一个新的二进制文件,”,ab+,”,(,读写) 为读,/,写打开一个二进制文件,C,语言文件操作方式,(,续,),r: read , w: write , a: append , b:binary ,+:,读写,18,(1 ),用,”,r,”,方式打开的文件只能用于向计算机输入数据,而且该文件应该已经存在,;,4.,标准文件操作方式的说明,(1-5),(2),用,”,w,”,方式打开的文件只能用于向该文件写数据,而不能用来向计算机输入。,如果不存在该文件,则在打开时建立一个。,如果存在该文件,则 新写入的数据将覆盖掉以前的数据,。,(,3,),如果希望向文件末尾添加新的数据(不希望删除原有数据),则应该用,”,a,”,方式打开,。,19,(,4,),用,”,r+,”,、,”,w+,”,、,”,a+,”,方式打开的文件可以用来输入和输出数据,。,(5),在程序开始运行时,系统自动打开三个标准文件:标准输入,(stdin),、标准输出,(stdout),、标准出错输出,(stderr),。,4.,标准文件操作方式的说明,(1-5),20,例:打,开,C,盘根下的,my,file.c,文件,验证文件能否正确打开,.,#include ,void main(), FILE *fa;,if(fa=fopen(,”,c:myfile.c,”,”,r,”,)=NULL), printf(“n Cannot open the file!”);,exit(0); /*,退出*,/,else,printf(,”,n Open!,”,);,?,提示:,1.,该文件在磁盘上不存在,/,存在时,比较运行结果。,2.,将程序中的,”,r,”,改为,”,w,”,当该文件在磁盘上不存在,/,存在时,比较运行结果,。,21,三,.,标准文件的关闭函数,: fclose,关闭文件指针,fp,所指的文件,释放相应的文件信息区,.,正常关闭文件时,函数返回值为,0.,函数原型,: int fclose(FILE *fp),;,功能:,在使用完一个文件后应该关闭它,以防止它再被误用,。,22,函数原型,:,四 标准文件读写函数,1.,读文件字符函数,:fgetc,fp,是指向所读文件指针变量,int fgetc(FILE *fp) ;,函数功能,:,从文件指针,fp,指向的文件当前位置,(,位置指针,),读出一个字符,然后文件位置指针自动后移,指向文件中的下一个字符,返回值为读入的字符,.,若遇到文件结束符,则返回结束符,EOF(-1).,例,:,ch=fgetc(fp);,23,例,:,将磁盘文件,”,mydata.txt,”,的信息读出并显示到屏幕上,.(,假设文件已经存在,若不存在,可以用记事本或其它文本编辑器编辑一个,),#include ,void main(), FILE *fp; char c;,if (fp=fopen(,”,mydata.txt,”,”,r,”,)=NULL),printf(“n File notexist!”);exit(0); ,while(c=fgetc(fp)!=EOF),putchar( c );,fclose(fp);,24,例,11.3,编写一个程序,实现,DOS,中的,type,命令的功能,.,#include ,void main(int argc,char *argv), FILE *fp; char c;,if (argc2)printf(,”n,NO file name,”,); exit(0);,if (fp=fopen(,”,mydata.txt,”,”,r,”,)=NULL),printf(,”,n File not exist!,”,);exit(0); ,while(c=fgetc(fp)!=EOF),putchar( c );,fclose(fp);,25,2 .,文件写入字符函数,: fputc,函数返回值,:,输出成功,返回值就是输出的字符,;,输出失败,返回一个,EOF(,值为,-1),。,功能:,把一个字符,ch,写到,fp,指向的磁盘文件上去,。,函数原型,:,int fputc(int ch, FILE *fp);,例,:,FILE *fp; char ch=,A,;,fputc(ch,fp),26,putchar,函数就是从,fputc,函数派生出来的。,putchar(c),是用,#define,定义的宏:,#,define putchar( c ) fputc(c,stdout),同理,,getchar,函数是从,fgetc,函数派生出来的。,getchar(c),是用,#define,定义的宏:,#,define getchar( c ) fgetc(stdin),注,27,例,11.4,从键盘输入一些字符存到一个磁盘文件,data.dat,中,,,以,“,#”,结束,。,#include ,void main(), FILE *fp; char c;,if (fp=fopen(,”,data.dat,”,”w”,)=NULL),printf(,”,n File cannot open!,”,);exit(0); ,while(c=getchar( )!=,”#”,),fputc ( c,fp );,fclose(fp);,28,例,11.5,将文件,filea.dat,的内容复制到文件,fileb.dat,中,。,#include ,void main(), FILE *f1,*f2;,if (f1=fopen(,”,filea.dat,”,”r”,)=NULL),printf(,”,n File cannot open!,”,);exit(0); ,if (f2=fopen(,”,fileb.dat,”,”w”,)=NULL),printf(,”,n File cannot creat!,”,);exit(0); ,while(c=fgetc(f1 )!=EOF ),fputc ( c,f2 );,fclose(f1); fclose(f2);,29,3.,读文件字符串函数,:fgets,从指针,fp,指向的文件中读取,len 1,个字符,,,把它送到由指针,buf,指向的字符数组中,。,char * fgets (,char,* buf ,int,len ,FILE,*fp) ;,函数原型,:,函数功能,:,字符数组的长度应大于,len,可存放,len-1,个字符,字符数组的最后一个元素为,0,.,若在读入,len-1,个字符前遇到换行符,n,或文件结束符号,EOF,立即结束读入操作,.,30,例,11.6,利用函数,fgets,将文本文件,filea.txt,中的内容全部读出并显示在屏幕上,。,分析,:,(,1,)一般地,文本文件以行为单位,每行最多,80,个字符,再加上一个行结束符号即换行符,n,,则每行至少需要,81,个字节的存储空间。,(,2,)使用函数,fgets,读取字符串时,若在读入,len-1,个字符完成之前遇到换行符,n,或文件结束符号,EOF,,立即结束读入操作。无论读入的字符是否等于或小于,len-1,个,函数为读入的字符串之后加一个,0,。因此,读入的字符(包括,0,)只有,len,个。,(,3,)定义文件指针。,(,4,)以只读方式打开文件。,(,5,)当文件未结束时,反复读出字符串并输出。,(,6,)关闭文件。,31,#include,void main,(),FILE *fp,;,char str81,;,if,(,fp=fopen,(,”aa.txt”,”rt”,),=NULL,),printf,(,”Cannot open file!”),;,getchar,(),;,exit,(,1),;,while,(,fgets,(,str,,,81,,,fp)!=NULL,),puts,(,str,);,fclose,(,fp,);,例,:,利用函数,fgets,将文本文件,filea.txt,中的内容全部读出并显示在屏幕上,。,32,4.,将字符串写入文件的函数,:,fputs( ),char * fputs ( char * buf, FILE * fp ) ;,把由指针,buf,指向的字符数组中的字符串写入由指针,fp,指向的文件中,。,buf,:字符串常量,字符数组名,指针变量,函数原型,:,函数功能,:,#include ,void main(),FILE *fp; char buf 81;,if( (fp=fopen(,”,data.txt,”,”,a,”,) = =NULL), printf(,”,File cannot open!,”,);exit(0);,while (fgets(buf,81,stdin)!=NULL ),fputs(buf,fp);,fclose(fp);,例,从键盘输入若干行字符,将它们添加到磁盘文件,data.txt,中,.,34,5.,数据块读写函数,:fread,和,fwrite,buffer:,是一个指针,。,对于,fread,,,它是读入数据的存放地址,。,对于,fwrite,,,是要输出数据的地址(起始地址),。,size:,要读写的字节数,。,count:,要进行读写多少个,size,字节的数据项,。,fp:,文件型指针,。,int fread(void *buffer,int size,int count,FILE *fp);,int fwirte(void *buffer,int size,int count,FILE (fp);,函数原型,:,35,例,11.8,从键盘输入两个学生的信息,写入磁盘文件,student.dat,中,.,分析:,(,1,)建立学生信息的结构体。,(,2,)定义文件指针。,(,3,)打开指定的文件。,(,4,)将学生信息写入文件。,(,5,)关闭文件。,36,#include ,sstruct student, char name10,;,int num,;,int age,;,char addr15,;, boy2,, *,pp,;,#define size sizeof(struct student),37,void main,(),FILE *fp,;,char ch,,,filename20,;,int i,;,gets,(,filename,),;,/*,输入文件名,*,/,fp=fopen,(,filename,,,”,wb+”,),;,/*,以读写方式打开二进制文件,也省略了检测,*,/,printf,(,”ninput datan”,),;,pp=boy,;,for,(,i=0,;,iname,,,&,pp-num,,,&,pp-age,,,pp-addr,),;,fwrite,(,boy,,,size,,,2,,,fp,),;,fclose,(,fp,);,/*,将两个学生的信息写入文件,*,/,38,例,11.9,将磁盘文件,student.dat,中的学生信息输出到屏幕上。,#include,struct stu,char name10,;,int num,;,int age,;,char addr15,;,boy2,,,*,pp,;,#define size sizeof,(,struct stu,),39,void main,(),FILE *fp,;,char ch,,,filename20,;,int i,;,gets,(,filename,);,pp=boy,;,fp=fopen,(,filename,,,”,wb+”,);,printf,(,”nnnametnumber age addrn”,),;,fread,(,pp,,,size,,,2,,,fp,),;,for,(,i=0,;,iname,,,&,pp-num,,,&,pp-age,,,pp-addr,),;,fclose,(,fp,);,40,一般调用方式为:,6.,格式化写读函数,:fprintf,和,fscanf,fprintf,(,文件指针,,,格式字符串,输出表列,),;,fscanf,(,文件指针,格式字符串,输入表列,),;,按照指定格式,向文件写,按照指定格式,从文件读,注意,:,fprintf,和,fscanf,函数对磁盘文件读写,printf,和,scanf,函数对显示器或键盘操作,.,41,例如,:,fscanf(fp,”,%d,%f,”,按格式字符串规定的格式,从,fp,指定的文件中读取数据分别送入变量,i,和,t,中,.,若磁盘文件上有以下字符,:,4, 5.6,则:,4 i 5.6 t,fprintf(fp,”,%d,%6.2f,”,i,t);,将整型变量,i,和实型变量,t,的值按,%d,和,%6.2f,的格式输出到,fp,指向的文件上,。,如果,i=5,t=5.8,则输出到磁盘文件上的是以下的字符串,:,5, 5.80,42,例,11.10,按指定的格式,将学生信息写入到一个二进制文件,stud. dat,中,.,#include,struct student,char name10,;,int num,;,int age,;,char addr15,;,boy2,,,*,pp,;,void main,(),FILE *fp,;,char ch,filename20,;,int i,;,gets,(,filename,),;,pp=boya,;,if(fp=fopen(filename,,”,wb+”)=NULL) printf(”Cannot open file!”),;,getch(),;,exit(1),;, printf ”ninput datan”),;,for(i=0,;,iname,,,&pp-num,,,&pp-age,,,pp-addr),;,pp=boya,;,for,(,i=0,;,iname,,,&qq-num,,,&qq-age,,,qq-addr,);,fclose(fp),;,43,例,11.11,从,文件,stud. dat,中,按指定的格式,将学生信息读出并显示到屏幕上,.,#include,void main,(),FILE *fp,;,char ch,,,filename20,;,int i,;,struct student,boy2,,,*,pp,;,printf,(,”nfilename:”,),;,gets,(,filename,),;,fp=fopen,(,filename,”rb+”,),;,for,(,i=0,;,iname,,,&,pp-num,,,&,pp-age,,,pp-addr,),;,printf,(,”,nnnametnumber,age addrn,”,),;,pp=boy,;,for,(,i=0,;,iname,,,pp-num,,,pp-age,,,pp-addr,),;,fclose,(,fp,),;,程序中结构体的说明参考例,11.8,44,五 文件的随机读写,移动文件位置指针的操作称为文件的,定位,.,实现随机读写的关键是要按指定的条件进行文件的定位操作。文件定位操作是通过库函数的调用来完成的。,在每个打开的文件中,有一个文件位置指针,它指向将要读写的字符位置。当对文件进行,顺序读写,时,每读完一个字符,该位置指针就自动移到下一个字符位置。,在实际问题中,常要求读写文件中某些指定的部分。为了避免不必要的读或写的操作,可先移动文件的位置指针到需要读写的位置,再进行读写,这种读写操作方式称为,随机读写,。,定位,随机读写,顺序读写,45,1.,文件指针定位,函数,:rewind,函数原型:,int rewind,(,FILE *fp,);,函数功能:,把文件指针,fp,指向文件的内部位置指针移到文件首。,2.,文件指针定位函数,:fseek,函数原型:,int fseek,(,FILE *fp,,,long offset,,,int pos,);,函数功能:,将文件指针,fp,指向文件的内部位置指针从,pos,指定的位置开始移动,offset,个字节,。,46,起始点表示方法,起始点,表示符号,数字表示,文件首,当前位置,文件末尾,SEEK_SET,SEEK_CUR,SEEK_END,0,1,2,offset,为位移量,表示移动的字节数,要求位移量是,long,型数据,以便在文件长度大于,64KB,时不会出错,当用常量表示位移量时,要求加后缀,“,l,”,或,“,L,”,.,若,offset,为负数,表示向文件首方向移动,否则是向文件尾方向移动;,pos,为起始点,表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾,.,47,例如,:,fseek(fp,100L,0);,文件指针从文件开始处向后移动,100,个字节,fseek(fp,60L,1);,文件指针从当前位置向后移动,60,个字节,fseek(fp,-10L,2);,文件指针从文件末尾处向前移动,10,个字节,注意:,位移量一般被要求是,long,型数据,,,这样当,文件的长度大于,64K,时不致出问题,。,48,#include “stdio.h”,void main(),FILE *fp1,*fp2;,fp1=fopen(,”,file1.c,”,”,r,”,);,fp2=fopen(,”,file2.c,”,”,w,”,);,while(!feof(fp1) putchar(getc(fp1);,rewind(fp1);,while(!feof(p1) putc(getc(fp1),fp2);,fclose(fp1);fclose(fp2);,例,11.12,有一个磁盘文件,第一次使它显示在屏幕上,第二次把它复制到另一文件上。,49,例,11.13,在磁盘文件上存有,10,个学生的数据。要求将第,1,、,3,、,5,、,7,、,9,个学生数据输入计算机,并在屏幕上显示出来。,#include,struct student_type,char name10;,int num;,int age;,char sex;,stud10;,50,void main(),int i;,FILE *fp;,if (fp=fopen(stud.,dat, rb)=NULL),printf(cannot open filen);,exit(0);,51,for(i=0;i0)/*,读源文件*,/,write,(,handle2,,,&ch,,,1,);,/*,复制到目标文件*,/,puts,(,Success,);,close,(,handle1,);,/*,关闭源文件*,/,close,(,handle2,);,/*,关闭目标文件*,/,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!