




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第13章 文 件,本章要点 掌握文件的基本概念 掌握文件类型指针 理解文件操作的基本方法 掌握文件处理函数 本章难点 对文件进行不同操作的函数的功能及其用法,13.1 C文件的概述,13.1.1 文件的基本概念,一、文件:是指存储在外部介质上数据的集合。,操作系统是以文件为单位对数据进行管理的。每一个与主机相连的输入或输出设备都看作是一个文件。,二、文件的存在形式及分类,文件的存在形式:文件名+文件内容。,文件内容:是一个字符(字节)序列,即由一个个字符 (字节)的数据顺序组成。对文件的存取是以字 符(字节)为单位的,这类文件称为流式文件。,文件的分类:,ASCII 码文件(文本文件):文件的每一个字节放 一个ASCII代码,代表一个字符。,二进制文件 :把内存中的数据按其在内存中的存 储形式原样输出到文件上。,三、文件的基本操作,打开文件把文件名等目录信息从磁盘上读 入内存并存入结构体。, 关闭文件把内存结构体中的文件名等目录 信息写入磁盘。,(3) 写文件 向文件写内容。,(4) 读文件 从文件读内容。,四、 文件的输入输出方式,非缓冲文件系统程序与外设直接进行数据交换。,特点每读写一次都要启动外设。,缓冲文件系统程序与外设通过内存缓冲区进行 数据交换。(常用的方式),特点只有内存缓冲区满(写盘)或空(读盘)才 启动外设。,1. 文件类型(FILE),每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件名,状态,当前位置等)。这些信息保存在一个结构体类型的变量中。结构体类型由系统定义为“FILE”。,有的C版本在 stdio.h文件中有如下定义: typedef struct int _fd;; /* 文件号 */ int _cleft; /* 缓冲区中剩下的字符 */ int _mode; /* 文件操作模式 */ char *_nexttc; /* 下一个字符位置 */ char *_buff; /* 文件缓冲区位置 */ FILE;,13.1. 文件指针,FILE 类型的指针变量定义方法,FILE *指针变量名;,例如:FILE *fp; 含义:fp是一个指向FILE类型结构体的指针变量。,可以使fp指向某个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该文件。,13.2 文件的打开与关闭,13.2.1 文件的打开函数(fopen函数),(1) 调用方式:,FILE *fp ; fp= fopen(文件名,文件的使用方式);,所要打开的文件名。必须是用双引号引起的字符串常量。,具有特定含意的符号也必须由双引号引起,用户定义的文件类型指针变量,例 FILE *fp; fp=fopen(“stu.dat“,“r“);,文件使用方式,基本方式字符(单独使用是对文本文件):,按二进制格式读写文件(基本方式字符+“b”),b 辅助说明,按二进制格式读写文件。,同时进行读写文件(基本方式字符+“b”+“+”),+ 辅助说明,可同时进行读和写文件。,例如:fp=(“stu.dat”,“rb”);,例如:fp=(“stu.dat”,“r+”);,例:#include main() FILE *fp; if(fp=fopen(“stu.dat“,“r“) =NULL) printf(“file not found.“); exit(0); else printf(“file opened ok!“); fclose(fp); ,程序运行结果: 如果磁盘上存在文件stu.dat,屏幕上会显示 file open ok!,否则屏幕上显示file not found.。,常使用此方法打开一个文件,exit函数的功能是关闭所有文件,终止程序运行。exit(0)为正常终止程序,13.2.2 文件的关闭函数(fclose函数),(1) 调用方式:,fclose(文件指针);, 功能:关闭由文件指针指定的文件,把缓冲区 中的数据(未装满缓冲区的数据)输出 到磁盘上,释放文件指针。,例如: FILE *fp; fp=fopen(“output.dat”,“r+”); /* 进行读写操作 */ fclose(fp);,注意:fopen函数和fclose函数总是成对出现的。 无fclose函数时会导致部分数据丢失!,13.3 文件的读写,13.3.1 单个字符操作的读写函数,这两个函数是以字符为单位进行文件读写的函数。,1. fputc函数,一般调用形式:,fputc(字符常量或变量,文件指针);,功能:把指定字符存入文件指针所指的文件中。 如果输出失败,则返回一个EOF(-1)。,例如:fputc(ch,fp); (其中ch为字符变量,fp为文件指针) 含义:将ch的值输出到fp所指向的文件中去。,(EOF是在stdio.h文件中定义的符号常量,值为-1),2. fgetc函数,一般调用形式:,字符变量=fgetc(文件指针);,功能:从文件指针所指文件中读一个字符赋给指 定的字符变量。当遇文件结束符,返回一 个文件结束标志EOF(-1)。,例如:ch=fgetc(fp); 其中ch为字符变量,fp为文件指针。 含义:从fp所指向的文件中读入一个字符赋 给字符变量ch。,例: 阅读程序。 #include “stdio.h“ #define NULL 0 main() FILE *fp; int count=0; char c; if(fp=fopen(“file.txt”,“r”)=NULL) printf(“Cant Open File n”); exit(0); c=fgetc(fp); while(c!=EOF) count+; c=fgetc(fp); printf(“count=%dn”,count); fclose(fp); ,若文件file.txt的内容是: abcd1234ABCD,输出结果:,12,这是读一个文本文件中字符,并判断文件是否结束的常用方法,13.3.2 字符串的读写函数,这两个函数是以字符串为单位进行文件读写的函数。,一般调用形式:,fputs(字符串,文件指针);,1. fputs函数,功能:向指定文件输出一个字符串。,例如:fputs(str,fp); (其中str是字符数组名) 含义:向fp 所指向的文件中输出str中的字符串。,2. fgets函数,fgets(字符串,字符串长度,文件指针);,功能:从指定文件中读入一个字符串。,例如:fgets(str,n,fp); (其中str是字符数组名) 含义:从fp指向的文件读取长度为n-1的字符串, 最后加一个0存入字符数组str中。,调用形式:,13.3.3 数据块的读写函数,一般调用形式:,fread(buffer,size,count,fp);,fwrite(buffer,size,count,fp);,其中:,buffer:是一个指针。(是起始地址)。 对fread来说,它是读入数据的存放地址。 对fwrite来说,它是输出数据的地址。,size :要读写的字节数。,count:要进行读写多少个size字节的数据项。,功能:对fp所指的文件读写buffer所指的size*count 个字节数据。,例如:fread(f,4,2,fp); (其中f是实型数组名),例1 把数组a写入文件fa;再从fa读入数组b。 #include “stdio.h“ main() FILE* fp; int a100=1,5,6,78,21,34,67,87,23,b100, i ; fp=fopen(“tmp“,“wb“); fwrite(a,sizeof(a),1,fp); /* fwrite(a,sizeof(int),100,fp);*/ fclose(fp); fp=fopen(“tmp“,“rb“); fread(b,sizeof(a),1,fp); for(puts(“),i=0;i10;i+)printf(“%6d“,bi); fclose(fp); ,13.3.4 格式化读写函数,这两个函数是进行格式读写文件的函数 。,一般调用形式:,fprintf(文件指针,格式字符串,输出表列);,fscanf(文件指针,格式字符串,输入表列) ;,例如:fprintf(fp,“%d,%6.2f”,i,x);,功能:按指定格式将数据写到指定文件中。 或从指定文件按格式输入数据。,又如:fscanf(fp,“%d,%f”,13.4 文件的定位与出错检测,1. rewind函数,一般调用形式:,rewind(文件指针);,功能:使位置指针重新返回文件的开头。,2. fseek函数,一般调用形式:,fseek(文件指针,位移量,起始点);,起始点:用0、1、2或其对应的名字SEEK_SET、 SEEK_CUR、SEEK_END代替,分别表 示文件开始、文件当前位置、文件末尾。,位移量:指以起始点为基点,向前(-)或向后移动的 字节数。ANSI C标准规定在数字末尾加一个 字母L,表示long型。,功能:把文件的读写位置指针移到指定的位置。,例如:fseek(fp,128L,SEEK_SET); 将位置指针移到离文件头128个字节处。,例如:fseek(fp,-10L,2); 将位置指针从文件末尾处向后退10个字节。,注意:fseek函数一般用于二进制文件。,3. ftell函数,一般调用形式:,ftell(文件指针);,功能:返回文件位置指针的当前值。,例如:pos=ftell(fp); 获取fp指向文件的当前读写位置,并将其值 赋给变量pos 。,. ferror()函数 ferror()函数用来确定文件操作系统中是否出错。其函数原型为: int ferror(FILE *fp); 如果ferror()函数返回值为0,则表示此前的文件操作成功;否则,若返回一个非0值,则表示最近一次文件操作出错。由于对文件的每次I/O操作都会形成新的出错码,所以在每次文件操作后应立即调用ferror()函数查看此次操作是否成功,否则会丢失信息。 表示上述功能常用的语句的是:,if(ferror(fp) printf(“file can not I/On“); fclose(fp); exit(0); ,5. clearer()函数 clearer()函数的函数原型为: void clearer(FILE *fp); 功能是清除文件结束标志和文件出错标志(设置为0)。本函数没有返回值。,6exit函数 当文件出现错误时,为了避免数据丢失,正常返回操作系统,可以调用过程控制函数exit关闭文件,终止程序的执行。 一般形式为: exit(status);,13.5 文件综合实例,编写一个程序,从data.dat文本文件中读出一个字符,将其加密后写入data1.dat文件中,加密方式是字符的ASCII码加1。 分析:先打开data.dat文本文件并建立data1.dat文件,从前者读出一个字符c,将(c+1)%256这个ASCII码对应的字符写入后者中。直到读完为止。,#include void main() FILE *fp,*fp2; char c; if(fp=fopen(“data.dat“,“r“)=NULL) printf(“不能打开文件n“); return; if(fp1=fopen(data1.dat),“w“)=NULL) printf(“不能建立文件n“); return; while(!feof(fp) c=fgetc(fp); c=(c+1)%256; fputc(c,fp1); fclose(fp); fclose(fp);,编写程序,创建数据文件goods.dat用于存储商品信息。已知每一个商品 包括:名称,单价,进货量,和库存4项数据。按指定的格式读写.,#include main() int count ,amount,stock; float price; char name20; FILE *fp; if(fp=fopen(“goods.dat”,”wb”)= =NULL) printf(“can not open file.n”); exit(0); ,for(count=0; ;count+) fprintf(“%d”,count+1); scanf(“%s%d%d”,name, ,fclose(fp); fp=fopen(“goods.dat”,”rb”); printf(“overstock goods is:n”); while(!feof(fp) fscanf(fp,”%s%f,%d,%d”,name, ,13.6 小 结,(1)文件是指存储在外部介质上的数据集合。 (2)对文件的操作包括文件的打开、关闭、读、写、文件的定位和出错的检验等。现在分别介绍如下: 在C语言中使用fopen()函数完成对文件的打开操作。其一般调用方式为:fopen(“文件名“,“操作方式“); 关闭文件用函数fclose()函数来实现,其调用的形式为:fclose(fp); 文件的读函数包括fgetc()函数、fgets()函数、fread()函数和fscanf()函数。 fgetc()函数的功能是从指定的文件中读入一个字符。 fgets()函数的功能是从文件指
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版师生教育信息化应用合作协议范本
- 2025年酒店内部员工饭堂承包经营合同范本
- 2025年新能源设备采购合同谈判与签订服务协议
- 2025版航空设备定期检修与维修合同
- 2025年度新型节能环保项目保证合同范本
- 2025年二手车维修保养服务买卖合同书规范文本
- 2025年度新能源电动车关键配件经销合同范本
- 2025年度城市绿化建设项目房屋拆迁安置合同
- 2025版铝单板仓储物流与销售代理合同
- 2025版智能水电系统施工维护劳务服务合同模板
- 厨房刀具安全培训课件
- 私密抗衰培训课件
- 2025年全国高中物理竞赛试题及答案
- 2024风电项目开工管理办法
- 供热企业运营管理制度
- 2025年高考真题-英语(全国一卷) 含答案
- RocketMQ分布式消息中间件:核心原理与最佳实践
- 绿色矿山服务合同协议书
- T/CIE 170-2023企业级固态硬盘测试规范第6部分:环境适应性测试
- 院感各类应急预案培训
- 2025年云南省事业单位考试c类真题及答案
评论
0/150
提交评论