版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第14章 文 件,掌握文件以及缓冲文件系统、文件指针的概念; 学会使用文件打开、关闭、读、写等文件操作函数。,14.1 C文件概述,一、文件的概念,文件:是指存储在外部介质上数据的集合。,操作系统是以文件为单位对数据进行管理的。每一个与主机相连的输入或输出设备都看作是一个文件。,二、文件的存在形式及分类,文件的存在形式:文件名+文件内容。,文件内容:是一个字符(字节)序列,即由一个个字符(字节)的数据顺序组成。对文件的存取是以字符(字节)为单位的,这类文件称为流式文件。,三、文件的基本操作,打开文件把文件名等目录信息从磁盘上读入内存并存入结构体。 关闭文件把内存结构体中的文件名等目录信息写入磁
2、盘。 写文件向文件写内容。 读文件从文件读内容。,四、 文件的输入输出方式,C语言对文件进行处理分为: 非缓冲文件系统 缓冲文件系统,14.2 C文件类型指针,一、文件类型(FILE),每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件名,状态,当前位置等)。这些信息保存在一个结构体类型的变量中。结构体类型由系统定义为“FILE”。,有的C版本在 stdio.h文件中有如下定义: typedef struct int _fd;; /* 文件号 */ int _cleft; /* 缓冲区中剩下的字符 */ int _mode; /* 文件操作模式 */ char *_nextt
3、c; /* 下一个字符位置 */ char *_buff; /* 文件缓冲区位置 */ FILE;,二、定义FILE类型指针变量,FILE 类型的指针变量定义方法,FILE *指针变量名;,例如:FILE *fp; 含义:fp是一个指向FILE类型结构体的指针变量。,可以使fp指向某个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该文件。,14.3 文件的打开和关闭函数,一、文件的打开函数(fopen函数),(1) 调用方式:,FILE *fp ; fp= fopen(文件名,文件的使用方式);,所要打开的文件名。必须是用双引号引起的字符串常量。,具有特定含意的符号也必须 由双引号
4、引起,用户定义的文件类型指针变量,功能:以指定的方式打开指定的文件,若操作成功,则返回一个指向该文件的指针,若打开文件时出现错误,则返回空指针NULL。,例 FILE *fp; fp=fopen(stu.dat,r);,文件使用方式,基本方式字符(单独使用是对文本文件):,按二进制格式读写文件(基本方式字符+“b”),b 辅助说明,按二进制格式读写文件。,同时进行读写文件(基本方式字符+“b”+“+”),+ 辅助说明,可同时进行读和写文件。,例如:fp=(“stu.dat”,“rb”);,例如:fp=(“stu.dat”,“r+”);,例:#include main() FILE *fp; i
5、f(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)为正常终止程序,二、文件的关闭函数(fclose函数),(1) 调用方式:,fclose(文件指针);, 功能:关闭由文件指针指定的文件,把缓冲区 中的数据(未
6、装满缓冲区的数据)输出 到磁盘上,释放文件指针。,例如: FILE *fp; fp=fopen(“output.dat”,“r+”); /* 进行读写操作 */ fclose(fp);,注意:fopen函数和fclose函数总是成对出现的。 无fclose函数时会导致部分数据丢失!,14.4 文件的读写函数,一、fputc函数 和fgetc函数,这两个函数是以字符为单位进行文件读写的函数。,1. fputc函数,一般调用形式:,fputc(字符常量或变量,文件指针);,功能:把指定字符存入文件指针所指的文件中。 如果输出失败,则返回一个EOF(-1)。,例如:fputc(ch,fp); (其中
7、ch为字符变量,fp为文件指针) 含义:将ch的值输出到fp所指向的文件中去。,(EOF是在stdio.h文件中定义的符号常量,值为-1),2. fgetc函数,一般调用形式:,字符变量=fgetc(文件指针);,功能:从文件指针所指文件中读一个字符赋给指 定的字符变量。当遇文件结束符,返回一 个文件结束标志EOF(-1)。,例如:ch=fgetc(fp); 其中ch为字符变量,fp为文件指针。 含义:从fp所指向的文件中读入一个字符赋 给字符变量ch。,例: 阅读程序。 #include stdio.h main() FILE *fp; int count=0; char c; if(fp=
8、fopen(file.txt,r)=NULL) printf(Cant Open File n); getch(); exit(0); c=fgetc(fp); while(c!=EOF) count+; c=fgetc(fp); printf(count=%dn,count); fclose(fp); getch(); ,若文件file.txt的内容是: abcd1234ABCD,输出结果:,12,这是读一个文本文件中字符,并判断文件是否结束的常用方法,【例14.1】从键盘输入一些字符,写入到磁盘文件data.txt中,直到输入一个“#”为止。,#include #include main(
9、 ) FILE *fp; char str; if(fp=fopen(data.txt,w)=NULL) /* 创建并打开data.txt文件 */ printf(cannot open filen); exit(0); /* 打开不成功退出 */ printf(请输入字符,以#结束n); while(str=getchar()!=#) /* 从键盘输入并判断是否为“#” */ fputc(str,fp); /* 写入到磁盘文件data.txt中 */ fclose(fp); /* 关闭文件 */ ,【例14.2】从例14.1建立的文件data.txt中读出所有的字符并显示在屏幕上。,#inc
10、lude #include main() FILE *fp; char ch; if(fp=fopen(data.txt,r)=NULL) /*以读方式打开文件,且测试*/ printf(cannot open filen); exit(0); /*打开不成功退出*/ printf(文件data.txt中的内容为:n); while(ch=fgetc(fp)!=EOF) putchar(ch); /*当读取字符不为EOF时,把字符输出到显示器*/ fclose(fp); ,二、字符串读/写函数:fgets()和fputs(),fputs() 调用形式: fputs(字符串,文件型指针); 作用
11、: 向指定的文件写入一个字符串。 返回值:如果输出成功,返回值为0;否则,为非0值。,fgets() 调用形式: fgets(str,n,fp); 作用: 从fp所指的文件中读出n1个字符送入字符数组str中。如果在读入n1个字符结束前遇到换行符n或EOF,读入结束。字符读入结束最后加一个0字符。 返回值:成功返回输入串的首地址,遇到文件结束或出错返回NULL。,【例14.3】复制文本文件file1.txt的内容到file2.txt中。,main() FILE *fp1,*fp2; char str 80; if(fp1=fopen(file1.txt,r)=NULL) printf(cann
12、t open file); exit(0); /*以读方式打开文件,且测试*/ if(fp2=fopen(file2.txt,w)=NULL) printf(cannt open file); exit(0); /*以写方式打开文件,且测试*/ while(fgets(str,80,fp1)!=NULL) /* file1.txt读取字符串 */ fputs(str,fp2); /* 一行字符串写入文件file2.txt */ fclose(fp1); fclose(fp2); ,sizeof 的用法,int i; sizeof(i)结果2 char *ss = 0123456789; siz
13、eof(ss) 结果 4 ss是指向字符串常量的字符指针 sizeof(*ss) 结果 1 *ss是第一个字符 char ss = 0123456789; sizeof(ss) 结果 11 ss是数组,计算到0位置,因此是101 sizeof(*ss) 结果 1 *ss是第一个字符,sizeof 的用法,char ss100 = 0123456789; sizeof(ss) 结果是100 ss表示在内存中的大小 1001 strlen(ss) 结果是10 strlen是个函数内部实现是用一个循环计算到0为止之前 int ss100 = 0123456789; sizeof(ss) 结果 400
14、 ss表示再内存中的大小 1004 strlen(ss) 错误 strlen的参数只能是char* 且必须是以0结尾的 char q=abc; char p=an; sizeof(q),sizeof(p),strlen(q),strlen(p); 结果是 4 3 3 2,sizeof 的用法,struct student int num; char sex; float score; stu; sizeof(stu)=?,关于文件读写状态的检测,检测函数调用是否成功,可有两种手段来检测:,1. 由函数的返回值来确定,2. 用文件状态检测函数feof、ferror、fclearerr,feof(
15、fp) :测试fp所指向的文件的位置是否是文件 尾。若已达到文件尾,函数返回非零值, 否则返回0。,常用程序段:while(!feof(fp),ferror(fp) :测试对fp所指向的文件的操作是否出 错。若出错,函数返回非零值,否则 返回0。,fclearerr(fp) :使ferror和feof函数值置0。,三、 fread函数和fwrite函数,一般调用形式:,fread(buffer,size,count,fp);,fwrite(buffer,size,count,fp);,其中:,buffer:是一个指针。(是起始地址)。 对fread来说,它是读入数据的存放地址。 对fwrite
16、来说,它是输出数据的地址。,size :要读写的字节数。,count:要进行读写多少个size字节的数据项。,功能:对fp所指的文件读写buffer所指的size*count 个字节数据。,例如:fread(f,4,2,fp); (其中f是实型数组名),例1 把数组a写入文件fa;再从fa读入数组b。 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
17、); fp=fopen(tmp,rb); fread(b,sizeof(a),1,fp); for(puts(),i=0;i10;i+)printf(%6d,bi); fclose(fp); ,四、 fprintf 函数和fscanf函数,这两个函数是进行格式读写文件的函数 。,一般调用形式:,fprintf(文件指针,格式字符串,输出表列);,fscanf(文件指针,格式字符串,输入表列) ;,例如:fprintf(fp,“%d,%6.2f”,i,x);,功能:按指定格式将数据写到指定文件中。 或从指定文件按格式输入数据。,又如:fscanf(fp,“%d,%f”,14.5 文件定位函数,1. rewind函数,一般调用形式:,rewind(文件指针);,功能:使位置指针重新返回文件的开头。,2. fseek函数,一般调用形式:,fseek(文件指针,位移量,起始点);,起始点:用0、1、2或其对应的名字SEEK_SET、 SEEK_CUR、SEEK_END代替,分别表 示文件开始、文件当前位置、文件末尾。,位移量:指以起始点为基点,向
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数字化转型下D公司保险业务系统运维项目质量管理的多维剖析与策略构建
- 数字化转型下A银行南宁分行中小企业信贷风险管理创新与实践
- 数字化赋能:高中电磁学演示实验教学革新与实践探索
- 数字化赋能:某省产品质量监督管理系统的创新设计与实践
- 数字化赋能:四川省金玉融资担保有限公司人事管理系统的深度设计与高效实现
- 2025年教师资格之幼儿保教知识与能力练习题库含答案
- 数字化浪潮下:广东省梅州市初中班主任QQ学生管理模式的探索与革新
- 数字化浪潮下区域性中小商业银行经营绩效提升路径探究
- 数字化浪潮下PJ电信农村移动业务市场的营销策略:洞察与突破
- Axure网站与App原型设计(全彩慕课版)(AxureRP10)- 教案 第7-12章 用Axure链接动作制作交互效果-产品经理的职能
- GB/T 25085.5-2026道路车辆汽车电缆第5部分:交流600 V或直流900 V和交流1 000 V或直流1 500 V单芯铜导体电缆的尺寸和要求
- 2026年矿山生态修复与矿区治理(新标准陆续实施)
- 2026年安徽工商职业学院单招综合素质考试题库及答案详解(名校卷)
- 2026年山西经贸职业学院单招职业适应性考试题库带答案详解(巩固)
- 2026年安徽城市管理职业学院单招职业适应性测试题库附参考答案详解(突破训练)
- 足疗店内部管理相关规定制度
- 课程与教学论知到智慧树期末考试答案题库2025年浙江师范大学
- 安徽2021-2025真题及答案
- 临床护理实践指南2024版
- (高清版)TDT 1055-2019 第三次全国国土调查技术规程
- 材料化学ppt课件(完整版)
评论
0/150
提交评论