C语言程序设计第十章

上传人:tia****g98 文档编号:244974102 上传时间:2024-10-06 格式:PPT 页数:29 大小:296.49KB
返回 下载 相关 举报
C语言程序设计第十章_第1页
第1页 / 共29页
C语言程序设计第十章_第2页
第2页 / 共29页
C语言程序设计第十章_第3页
第3页 / 共29页
点击查看更多>>
资源描述
C,第十章 文件,10.1,概述,文件:存储在外部介质上数据的集合,是操作系统数据管理的单位,使用数据文件的目的,数据文件的改动不引起程序的改动,程序与数据分离,不同程序可以访问同一数据文件中的数据,数据共享,能,长期保存,程序运行的中间数据或结果数据,概述,C,语言把文件看作一个字节序列,即由一连串的字节组成,称为“流(,stream)”,,以字节为单位访问,没有记录的界限,文件分类,按文件的逻辑结构:,记录文件:由具有一定结构的记录组成(定长和不定长),流式文件:由一个个字符(字节)数据顺序组成,按存储介质:,普通文件:存储介质文件(磁盘、磁带等),设备文件:非存储介质(键盘、显示器、打印机等),按数据的组织形式:,文本文件:,ASCII,文件,每个字节存放一个字符的,ASCII,码,二进制文件:数据按其在内存中的存储形式原样存放,如 int,型数10000,00100111 00010000,内存存储形式,二进制形式,00110001 00110000 00110000 00110000 00110000,ASCII,形式,文本文件特点:,存储量大、速度慢、便于对字符操作,二进制文件特点:,存储量小、速度快、便于存放中间结果,00100111 00010000,磁盘文件,输出文件缓冲区,输入文件缓冲区,程序数据区,a,缓冲文件系统:,缓冲区,指令区,程序,用户数据区,磁盘,非缓冲文件系统:,文件处理方法,缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区,非缓冲文件系统:低级文件系统,由用户在程序中为每个文件设定缓冲区,10.2 文件类型指针,要调用一个文件,需要有以下的信息,文件当前的读写位置,与该文件对应的内存缓冲区的地址,缓冲区中未被处理的字符串,文件操作方式等,缓冲文件系统为每个正使用的文件在内存开辟文件信息区,文件信息用系统定义的名为,FILE,的结构体描述,FILE,定义在,stdio,.h,中,typedef struct int _fd;/*文件号*/int _cleft;/*缓冲区中剩下的字节数*/int _mode;/*文件操作模式*/char*_nextc;/*下一个字节的位置*/char*_buff;/*文件缓冲区位置*/FILE;,文件类型指针,文件名,文件使用,方式,文件类型指针,C,程序,操作系统,磁盘,文件类型指针,指针变量说明:,FILE *,fp,;,用法:,文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得,文件信息,访问文件,文件关闭后,它的文件结构体被释放,10.3 文件的打开与关闭,文件操作用库函数实现,包含在,stdio,.h,文件使用方式:打开文件-文件读/写-关闭文件,系统自动打开和关闭三个标准文件:,标准输入-键盘,stdin,标准输出-显示器,stdout,标准出错输出-显示器,stderr,文件的打开,FILE *fopen(const char*filename,const char*mode);,文件名(可以包含逻辑驱动器、,路径、文件名、扩展名),打开方式,返回值,功能:按指定方式从磁盘上查找指定的文件或创建一个新文件。,返值:正常打开,为指向文件结构体的指针;打开失败,为,NULL,例:FILE*fp;fp=fopen(file1,r);,如果成功打开,返回一个指向被打开文件的文件信息区的起始地址;如果打开失败,返回一个NULL指针。,文件的打开,文件打开方式,含义,r(只读),为输入打开一个文本文件,w(只写),为输出打开一个文本文件,a(追加),为追加打开一个文本文件,rb(只读),为输入打开一个二进制文件,wb(只写),为输出打开一个二进制文件,ab(追加),为追加打开一个二进制文件,r+(读写),为读写打开一个文本文件,w+(读写),为读写创建一个文本文件,a+(读写),为读写打开一个文本文件,rb+(读写),为读写打开一个二进制文件,wb+(读写),为读写创建一个二进制文件,ab+(读写),为读写打开一个二进制文件,说明:,打开文件的方式,必须与文件的属性兼容。例如,不能以“,w”,和“,a”,方式打开具有“只读”属性的文件。但可以以任何方式打开“隐藏”属性文件。,DOS/Windows,中,无“只写”文件属性,一个文件可写,同时意味着可读。,用带“,r”,的方式(“,r”、“,rb,”、“r+”、“,rb,+”),打开文件时,若文件不存在,则返回,NULL,指针。一般用以下方式检查是否成功打开:,FILE*,fp,;if(,fp,=,fopen,(file1,r)=NULL),printf,(cannot open this filen);exit(0);/*exit(0),是程序返回操作系统,*/,文件的打开,在,Turbo C2.0,中,用带“,a”,或带“,w”,的方式打开文件时,若文件不存在,则创建该文件。但,fopen,(),函数仍可能因为磁盘写保护或目录满而失败。,在,Turbo C2.0,中,用带,a,或带,w,的方式打开文件时,若文件已存在,,a,方式在原文件后追加数据,,w,方式把原文件删除、并重新创建一个相同名字的文件。,文件的关闭,int fclose(FILE *fp),文件打开时返回的文件类型指针,功能:,关闭,fp,指向的文件,,使文件指针变量与文件“脱钩”,释放文件结构体和文件指针,返值:,正常关闭为0;出错时,非0,磁盘文件,输出文件缓冲区,输入文件缓冲区,程序数据区,a,缓冲文件系统:,不关闭文件可能会,丢失数据,fclose,10.4 文件的读写,fputc,的函数原型为:,int,fputc,(,char ch,FILE *fp,),作用:将ch中的字符输出到fp所指向的文件中,通常用于往文本文件中写入一个字符,返回值:输出成功则返回所输出的字符,失败则返回EOF,fgetc,的函数原型为:,int,fgetc,(,FILE *fp,),作用:从fp所指向的文件中读入一个字符,返回值:返回所读的字符,如发生错误或读到文件结束符失败则返回EOF,例 从键盘输入字符,逐个存到磁盘文件中,直到输入#“为止,#include,main(),FILE*fp;,char ch,*filename=“out.txt”;,if(fp=fopen(filename,w)=NULL),printf(cannot open filen);,exit(0);,printf(Please input string:);,ch=getchar();,while(ch!=#),fputc(ch,fp);,putchar(ch);,ch=getchar();,fclose(fp);,例 读文本文件内容,并显示,#include,main(),FILE*fp;,char ch,*filename=“out.txt”;,if(fp=fopen(filename,”r)=NULL),printf(cannot open filen);,exit(0);,while(,ch=fgetc(fp),)!=,EOF,),putchar(ch);,fclose(fp);,判断文本文件是否结束,判断二进制文件是否结束,while(!feof(fp),c=fgetc(fp);,.,例 文件拷贝,feof,函数原型:,int feof(FILE *fp),功能:判断文件是否结束,返值:文件结束,返回真(非0);文件未结束,返回0,#include,main(),FILE*in,*out;,char ch,infile10,outfile10;,scanf(%s,infile);,scanf(%s,outfile);,if(in=fopen(infile,r)=NULL),printf(Cannot open infile.n);,exit(0),;,if,(out=fopen(outfile,w)=NULL),printf(Cannot open outfile.n);,exit(0);,while(!feof(in),fputc(fgetc(in),out);,fclose(in);fclose(out);,fwrite,的,函数原型为:,unsigned,fwrite,(void,*buffer,unsigned,size,unsigned,count,FILE,*fp,),作用:将buffer所指向的内存单元开始的内存区中的长度为size的count个数据项写入fp所指向的文件中,返回值:调用成功则返回实际输入的数据项,即count的值,fwrite函数主要用于二进制文件的写操作,可以将一个数据块(即一组数据)写到文件中。,fread,的,函数原型为:,unsigned,fread,(void,*buffer,unsigned,size,unsigned,count,FILE,*fp,),作用:从fp所指向的文件中将读出每项长度为size的count个数据项,存放到buffer所指向的内存单元开始的存储区中,返回值:返回实际所读出的数据项,即count的值,fread函数主要用于二进制文件的读操作,从文件中读出一组数据。,如果文件以二进制形式打开,用fread和fwrite可以读写任何类型的信息。,、若f 为float型数组,共10个元素:,fread(f,4,10,fp);,fread(f,sizeof(float),10,fp);,fread(f,8,5,fp);,fwrite(f,sizeof(float),10,fp);,、若有结构体类型:,struct student,long num;,char name;,float score3;,stu30;,for(i=0;i30;i+),fwrite(,for(i=0;i30;i+),fread(,说明:,、由fputc函数建立的文件,通常由fgetc函数读取,它们的操作对象均为字符,所以称为字符读写函数;,、由fwrite函数建立的文件,通常由fread函数读取,它们以数据块为单位进行读写,所以称为块读写函数;,关于文件追加的含义:,追加数据时,文件中的原有数据仍然存在,新写入的数据写到原文件数据之后。,打开文件时,系统内部存在一个位置指针,指出对数据操作的位置。,用r、w、rb、wb打开文件时,位置指针指向文件开始处;读写时总是文件的第一个数据;,用a、ab打开文件时,位置指针则指向整个文件最后一个数据之后;写数据时追加到了原有数据之后。,例 float f2;,FILE *fp;,fp=fopen(“aa.dat”,“rb”);,fread(f,4,2,fp);,for(i=0;i2;i+),fread(,例 struct student,int num;,char name20;,char sex;,int age;,float score3;,stud10;,for(i=0;i10;i+),fread(,例 从键盘输入4个学生数据,把他们转存到磁盘文件中去,#include,#define SIZE 2,struct student_type,char name10;,int num;,int age;,char addr15;,studSIZE;,main(),int i;,for(i=0;iSIZE;i+),scanf(%s%d%d%s,studi.name,&studi.num,save();,void save(),FILE*fp;,int i;,if(,fp=fopen(stu_dat,wb)=NULL,),printf(cannot open filen);,return;,for(i=0;iSIZE;i+),if(,fwrite(&studi,sizeof(struct student_type),1,fp)!=1,),printf(file write errorn);,fclose(fp,);,格式化I/O:f
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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