版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第12章 文 件 12.1 C文件的基础知识12.2 文件指针12.3 文件操作12.4 应用实例12.1 C文件的基础知识12.1.1 文件的概念 12.1.2 C文件操作的基本方法 12.1.1 文件的概念 所谓“文件”一般指存储在外部介质上数据的集合。一批数据是以文件形式存放在外部介质上的。C语言把文件看作是一个字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。根据数据的组织形式,可分为ASCII文件和二进制文件,如下图所示。12.1.1 文件的概念 ASCII文件:又称文本文件,它的每一个字节放一个ASCII代码,代表一个字符。 二进制文件:是把内存中的数据按其在内存中的存储
2、形式原样输出到磁盘上存放。 流文件:一个C文件就是一个字节流或二进制流。输入输出的数据流的开始和结束仅受程序控制而不受物理符号(如回车)控制。把这种文件称为“流文件”。缓冲文件系统:系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。 12.1.2 C文件操作的基本方法 在Turbo C 2.0中,文件操作常用函数如下表所示。格式功能fputc(字符,文件指针)把一个字符写到指定文本文件上fgetc(文件指针)从指定文本文件读取一个字符fgets(传始地址,字符数+1,文件指针)从指定文件读取字符串fputs(传始地址,文件指针)把字符串写入指定文件fwrite(始地址,字节数,个数,文件
3、指针)一般用于二进制文件输出fread(始地址,字节数,个数,文件指针)一般用于二进制文件输入fprintf(文件指针,格式字符串,输出表列)类似printf()函数,但向指定文件输出fscanf(文件指针,格式字符串,输出表列)类似scanf()函数,但向指定文件读取feof(文件指针)判断文件结束fopen(文件名,文件打开方式)打开文件fclose(文件指针)关闭文件fseek(文件名,位移量,起点)文件定位ftell(文件指针)获取文件当前位置指针的位置rewind(文件指针)文件的位置指针回到文件头12.2 文件指针 一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对
4、它所指的文件进行各种操作。定义说明文件指针的一般形式为: FILE *指针变量标识符 其中FILE应为大写,它实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息。 12.3 文件操作 12.3.1 文件打开12.3.2 文件关闭12.3.3 读、写文件12.3.4 文件定位12.3.5 出错检测12.3.1 文件打开所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其他操作。 fopen函数用来打开一个文件,其调用的一般形式为:文件指针名=fopen(文件名,文件打开方式)其中:“文件指针名”必须是被说明为FILE 类型的指针变量。“文件
5、名”是被打开文件的文件名。“文件打开方式”是指文件的类型和操作要求。12.3.1 文件打开使用文件的方式共有12种,它们的符号和意义如下表所示。文件使用方式意义“rt”只读打开一个文本文件,只允许读数据“wt”只写打开或建立一个文本文件,只允许写数据“at”追加打开一个文本文件,并在文件末尾写数据“rb”只读打开一个二进制文件,只允许读数据“wb”只写打开或建立一个二进制文件,只允许写数据“ab”追加打开一个二进制文件,并在文件末尾写数据“rt+”读写打开一个文本文件,允许读和写“wt+”读写打开或建立一个文本文件,允许读写“at+”读写打开一个文本文件,允许读,或在文件末追加数据“rb+”读
6、写打开一个二进制文件,允许读和写“wb+”读写打开或建立一个二进制文件,允许读和写“ab+”读写打开一个二进制文件,允许读,或在文件末追加数据12.3.1 文件打开对于文件使用方式有以下几点说明:(1)文件使用方式由“r、w、a、t、b、+ ”六个字符拼成,各字符的含义是:r(read):读。w(write):写。a(append):追加。t(text):文本文件,可省略不写。b(binary):二进制文件。+:读和写。(2)凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。(3)用“w”打开的文件只能向该文件写入。 12.3.1 文件打开(4)若要向一个已存在的文件追加新的信
7、息,只能用“a”方式打开文件。 (5)在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。 (6)把一个文本文件读入内存时,要将ASCII码转换成二进制码,而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码。 (7)标准输入文件(键盘),标准输出文件(显示器),标准出错输出(出错信息)是由系统打开的,可直接使用。12.3.2 文件关闭 文件一旦使用完毕,应用关闭文件函数把文件关闭,以避免文件的数据丢失等错误。fclose函数调用的一般形式是: fclose(文件指针); 正常完成关闭文件操作时,fclose函数返回值为0。如返回非零值则表示有错误发生。12.3.3 读
8、、写文件 1. 读字符函数fgetc fgetc函数的功能是从指定的文件中读一个字符,函数调用的形式为: 字符变量=fgetc(文件指针); 对于fgetc函数的使用有以下几点说明:(1)在fgetc函数调用中,读取的文件必须是以读或读写方式打开的。(2)读取字符的结果也可以不向字符变量赋(3)在文件内部有一个位置指针。用来指向文件的当前读写字节。 12.3.3 读、写文件 2. 写字符函数fputc fputc函数的功能是把一个字符写入指定的文件中,函数调用的形式为: fputc(字符量,文件指针); 其中,待写入的字符量可以是字符常量或变量。12.3.3 读、写文件 【例12-2】从键盘输
9、入一行字符,写入一个文件,再把该文件内容读出显示在屏幕上。#includemain() FILE *fp; /*定义文件指针fp*/ char ch; /*以读写文本文件方式打开文件*/ if(fp=fopen(d:tc2string.txt,wt+)=NULL) printf(Cannot open file strike any key exit!); getch(); exit(1); 12.3.3 读、写文件 printf(input a string:n); ch=getchar(); /*读入一个字符后进入循环*/ while (ch!=n) fputc(ch,fp); /*当读入
10、字符不为回车符时,则把该字符写入文件之中*/ ch=getchar(); rewind(fp); /*用于把fp所指文件的内部位置指针移到文件头*/ ch=fgetc(fp); /*读出文件中的一行内容*/ while(ch!=EOF)12.3.3 读、写文件 putchar(ch); ch=fgetc(fp); printf(n); fclose(fp); /*关闭文件*/【例12-2】程序运行结果如下图所示。12.3.3 读、写文件 函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针); 其中的n是一个正整数。表示从文件中读出的字符
11、串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志“0”。(2)fgets函数也有返回值,其返回值是字符数组的首地址。对fgets函数有两点说明:(1)在读出n-1个字符之前,如遇到了换行符或EOF,则读出结束。3. 读字符串函数fgets12.3.3 读、写文件 【例12-4】从string.txt文件中读入一个含10个字符的字符串。#includemain() FILE *fp; char str11; /*以读文本文件方式打开文件*/ if(fp=fopen(d:tc2string.txt,rt)=NULL) printf(nCannot open file strike an
12、y key exit!); getch(); exit(1); 12.3.3 读、写文件 fgets(str,11,fp); /*读出10个字符送入str数组*/ printf(n%sn,str); /*输出str数组*/ fclose(fp); /*关闭文件*/【例12-4】程序运行结果如下图所示。12.3.3 读、写文件 4. 写字符串函数fputs fputs函数的功能是向指定的文件写入一个字符串,其调用形式为: fputs(字符串,文件指针); 其中字符串可以是字符串常量,也可以是字符数组名,或指针变量。12.3.3 读、写文件 5. 整块数据的读写函数 读数据块函数调用的一般形式为:
13、fread(buffer,size,count,fp); 写数据块函数调用的一般形式为:fwrite(buffer,size,count,fp); 其中:buffer:是一个指针,在fread函数中,它表示存放输入数据的首地址。在fwrite函数中,它表示存放输出数据的首地址。size:表示数据块的字节数。Count:表示要读写的数据块块数。Fp:表示文件指针。12.3.3 读、写文件 6. fscanf、fprintf函数 格式化读写函数。 fscanf函数和fprintf函数的读写对象不是键盘和显示器,而是磁盘文件。这两个函数的调用格式为: fscanf(文件指针,格式字符串,输入表列);
14、 fprintf(文件指针,格式字符串,输出表列);12.3.3 读、写文件 【例12-7】用fscanf和fprintf函数成例12-6的问题。#includestruct stu /*定义一个结构stu*/ char name10; int num; int age; char addr15;boya2,boyb2,*pp,*qq; /*说明两个结构数组以及两个结构指针变量*/12.3.3 读、写文件 main() FILE *fp; char ch; int i; pp=boya; /* pp指向boya,qq指向boyb */ qq=boyb; if(fp=fopen(stu_list
15、,wb+)=NULL) /*以读写方式打开二进制文件*/ printf(Cannot open file strike any key exit!); getch(); exit(1); 12.3.3 读、写文件 printf(ninput datan); for(i=0;iname,&pp-num,&pp-age,pp-addr); pp=boya; for(i=0;iname,pp-num,pp-age,pp-addr); rewind(fp); /*把文件内部位置指针移到文件首*/ for(i=0;iname,&qq-num,&qq-age,qq-addr); /*写入该文件*/ pri
16、ntf(nnnametnumber age addrn); qq=boyb; for(i=0;iname,qq-num, qq-age, qq-addr); fclose(fp);12.3.3 读、写文件 【例12-7】程序运行结果如下图所示。12.3.4 文件定位 实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。移动文件内部位置指针的函数主要有两个,即rewind函数和fseek函数。rewind函数的调用形式为: rewind(文件指针); 它的功能是把文件内部的位置指针移到文件首。12.3.4 文件定位 fseek函数用来移动文件内部位置指针,其调用形式为:fseek(文件指
17、针,位移量,起始点); 其中:“文件指针”指向被移动的文件。起始点表示符号数字表示文件首SEEK_SET0当前位置SEEK_CUR1文件末尾SEEK_END2“位移量”表示移动的字节数。当用常量表示位移量时,要求加后缀“L”。“起始点”表示从何处开始计算位移量,其表示方法如下表所示。12.3.5 出错检测 1. 文件结束检测函数feof feof调用格式:feof(文件指针); 功能:判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则为0。2. 读写文件出错检测函数 ferror函数调用格式:ferror(文件指针); 功能:检查文件在用各种输入输出函数进行读写时是否出错。如ferr
18、or返回值为0表示未出错,否则表示有错。12.3.5 出错检测 3. 文件出错标志和文件结束标志置0函数clearerr函数调用格式: clearerr(文件指针);功能:本函数用于清除出错标志和文件结束标志,使它们为0值。12.4 应用实例 【例12-9】从键盘输入一些字符,逐个把它们送到磁盘上,直到输入一个“”为止。#include main()FILE *fp; /*定义文件指针fp*/ char ch,filename10; scanf(%s,filename); if(fp=fopen(filename,“w”)=NULL) /*打开文件*/ printf(cannot open f
19、ilen);12.4 应用实例 exit(0); ch=getchar(); /*先读入一个字符*/ while(ch!=#) fputc(ch,fp),putchar(ch); /*把读入的字符写入文件*/ ch=getchar(); fclose(fp); 12.4 应用实例 【例12-9】程序运行结果如下图所示。12.4 应用实例 【例12-10】将一个磁盘文件中的信息复制到另一个磁盘文件中。#include main()FILE *in,*out; /*定义文件指针*/ char ch,infile10,outfile10; printf(Enter the infile name:n
20、); scanf(%s,infile); printf(Enter the outfile name:n); scanf(%s,outfile); if(in=fopen(infile,“r”)=NULL) /*打开文件*/12.4 应用实例 printf(cannot open infilen); exit(0); if(out=fopen(outfile,“w”)=NULL) /*打开文件*/ printf(cannot open outfilen); exit(0); while(!feof(in)fputc(fgetc(in),out); /*复制 文件信息*/ fclose(in); fclose(out);12.4 应用实例 【例12-10】程序运行结果如下图所示。12.4 应用实例 【例12-11】输入10个学生的数据。要求将第1、3、5、7、9个学生数据输出到计算机。#inclu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药品监督管理局新闻宣传中心2026年度公开招聘笔试备考题库带答案
- 药物购销员题库带答案
- 血液病学案例分析题库及答案
- 西药药剂高级药师题库及答案
- 评标专家考试模拟题库及参考答案
- 起重作业试题题库及答案
- 辽宁省大连市2026年中级银行从业资格中级风险管理考试题库及答案
- 邮政金融笔模拟试题库及答案
- 铁路货运规章题库及答案
- 银行从业资格考试法律法规与综合能力题库及答案
- 客户参观公司讲解
- gis组合电器培训课件
- 内蒙古维拉斯托矿业有限公司招聘笔试题库2025
- 国际海上货运代理国际货运代理实务73课件
- (高清版)DG∕TJ 08-2068-2019 超高压喷射注浆技术标准
- 传统语文教育教材论
- 新能源汽车三电系统培训教程
- 职业卫生模拟试题含答案
- DB3203-T 1063-2024 人事考试命题工作实施规范
- 消化内科入科培训
- 《高血压危象》课件
评论
0/150
提交评论