版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第14章文件14.1文件概述14.2文件的基本操作
14.1文件概述
14.1.1文件的概念和类型文件是指存储在外部介质上的一组相关数据的集合。例如,程序文件是程序代码的集合,数据文件是数据的集合。每个文件都有一个名称,称为文件名。一批数据是以文件的形式存放在外部介质(如硬盘)上的,而操作系统以文件为单位对数据进行管理。也就是说,如果想寻找保存在外部介质上的数据,必须先按文件名找到指定的文件,然后从该文件中读取数据。如果要向外部介质存储数据,也必须以文件名为标识先建立一个文件,才能向它输出数据。
在程序运行时,常常需要将一些数据(运行的最终结果或中间数据)输出到硬盘上存放起来,以后需要时再从硬盘输入到计算机内存,这就要用到存储文件。除存储文件外,操作系统把每一个与主机相连的输入/输出设备都看作文件来管理。比如,键盘是输入文件,显示屏和打印机是输出文件。
在C语言中,文件被看作由字符(字节)按顺序组成的数据序列,并可按数据的组织方式分为二进制文件和ASCII码文件两种。
二进制文件是按二进制的编码方式来存放文件的。例如,数5678的存储形式为0001011000101110,占两个字节。
二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C语言系统在处理这些文件时,并不区分类型,都将其看成是字符流,按字节进行处理。输入/输出字符流的开始和结束由程序控制,不受物理符号(如回车符)的控制。因此,也把二进制文件称作“流式文件”。
14.1.2文件指针
每个被使用的文件都在内存中开辟一个区域,用来存放文件的有关信息。这些信息是保存在一个结构体类型的变量中的,该结构体类型由系统定义,取名为FILE。
FILE结构体类型的定义包含在stdio.h头文件中,由系统自动完成。只要程序用到一个文件,系统就为此文件开辟一个如上的结构体变量。有几个文件,就开辟几个这样的结构体变量,分别用来存放各个文件的有关信息。这些结构体变量不用变量名来标识,而通过指向结构体类型的指针变量来访问,这就是“文件指针”。
例如:
FILE*fp;
其中,fp是指向FILE结构体类型的指针变量,称其为指向一个文件的指针。
14.2文件的基本操作
14.2.1文件的打开和关闭1.文件的打开标准输入/输出函数库提供fopen( )函数完成文件的打开操作。fopen( )函数的用法为FILE*fp;fp=fopen(文件名,或文件操作方式);其中,文件操作方式见表14-1。
说明:
(1)如果不能实现打开任务,fopen( )函数将会带回一个出错信息,出错的原因可能是用“r”方式打开一个并不存在的文件、硬盘出故障、硬盘已满无法建立新文件等,此时fopen( )函数将带回一个空指针值NULL。
(2)在读取文本文件时,系统会将回车符和换行符转换为一个换行符;在输出时,把换行符转换成回车和换行符。在使用二进制文件时,不进行这种转换,在内存中的数据形式与输出到外部文件中的数据形式完全一致。
【例14.1】打开一个名为texe.txt的文件并准备进行写操作。
这种用法可以在写文件之前先检验文件是否成功打开。
2.文件的关闭
fclose( )函数用来关闭一个已由fopen( )函数打开的文件。在程序结束之前,必须关闭所有文件。文件未关闭会引起很多问题,如数据丢失、文件损坏及其他错误。
fclose( )函数的调用形式为
fclose(fp);
其中,fp是一个调用fopen( )时返回的文件指针。
若关闭文件成功,则fclose( )函数的返回值为0;若fclose( )函数的返回值不为0,则说明出错了。
14.2.2文件的读/写
1.字符读/写操作
fputc( )函数和fgetc( )函数用来读/写字符。它们的调用形式分别为
fputc(ch,fp);
ch=fgetc(fp);
其中,fp为文件指针,ch为字符变量。
fputc(ch,fp)函数的作用是将字符ch的值输出到fp所指向的文件中。如果输出成功,则返回值就是输出的字符;如果输出失败,则返回一个EOF(或整型常量-1)。
fgetc( )函数从指定的文件读入一个字符,赋给ch。如果在执行fgetc( )函数读字符操作时遇到文件结束符,则函数返回文件结束标志EOF(或整型常量-1)。
【例14.2】从文本文件头一直读到文件尾的程序示例。
对于文本文件,判定文件是否结束有以下两种方法:
(1)读入的字符若是EOF(或整型常量-1),则文件结束。
(2)利用feof(fp)函数,若文件结束,则feof(fp)函数返回非0值,否则返回0。
对于二进制文件,只能利用feof(fp)函数来判定文件是否结束。
【例14.3】从二进制文件首一直读到文件尾的程序示例。
2.字符串读/写操作
fgets( )函数和fputs( )函数用来读/写字符串。它们的调用形式分别为
fgets(str,length,fp);
fputs(str,fp);
其中,str是字符指针,length是整型数值,fp是文件指针。
fgets( )函数从fp指定的文件中当前的位置读取字符串,直至读到换行符或第length-1个字符或遇到EOF为止。如果读入的是换行符,则它将作为字符串的一部分。fgets( )函数操作成功时,返回str;若发生错误或到达文件尾,则返回一个空指针。
fputs( )函数用来向fp指定的文件的当前位置写字符串。fputs( )函数操作成功时返回0,否则返回非零值。
3.数据块读/写操作
fread( )函数和fwrite( )函数用来读/写数据块。它们的调用形式分别为
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
其中,buffer是一个指针,用于读入数据的存放地址或输出数据的地址(以上指的是起始地址);size是要读/写的字节数;count是要读/写多少次size字节的数据项;fp是文件指针。
fread( )函数操作成功时,返回实际读取的字段个数count;到达文件尾或出现错误时,返回值小于count。fwrite( )函数操作成功时,返回实际所写的字段个数count;返回值小于count,说明发生了错误。
如果文件以二进制形式打开,则用fread( )和fwrite( )函数读/写任何类型的信息。例如:
fread(a,4,8,fp);
其中,a是一个实型数组名。一个实型变量占4个字节。这个函数从fp所指向的文件读入8次(每次4个字节)数据,存储到数组a中。
4.格式化读/写操作
fprintf( )函数和fscanf( )函数的功能与printf( )函数和scanf( )函数的功能完全相同,其操作的对象是文件。调用形式分别为
fprintf(fp"控制字符串",参数表);
fscanf(fp"控制字符串",参数表);
其中,fp是文件指针,控制字符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 蜂产品品评员工作效率能力考核试卷含答案
- 2026年生物安全竞赛试题和答案
- 磁头装配工安全意识强化模拟考核试卷含答案
- 粮油购销员安全管理评优考核试卷含答案
- 船舶钳工诚信品质水平考核试卷含答案
- 2026年银行招聘考试《会计学》专业知识全真模拟试卷(附答案)
- 2026年公务员行测申论结合模拟试卷(附答案)
- 2026年卫生职称《临床医学》冲刺模拟试卷(含答案)
- 2026年造价工程师考试《安装工程识图》全真模拟试卷(附答案)
- 呼吸机管路试题及答案
- 变形铝及铝合金制品组织检验方法第2部分:低倍组织检验方法
- 2026年贵州省初级注册安全工程师职业资格考试试题及答案安全生产实务·其他
- 人工智能原理及其应用(第5版)课件全套 第1-8章 概述-智能体应用
- 2026年6月浙江高考选考物理试卷试题真题(含答案详解)
- 环水保监理实施细则
- 江苏水利工程设计概(估)算编制规定2017年修订版
- 污水处理PLC控制系统方案设计指南
- 设施设备维护人员面试题及答案
- 1105 非无菌产品微生物限度检查:2020年版 VS 2025年版对比表
- 医务人员职业暴露试题(附答案)
- 公路施工项目安全风险评估报告范本
评论
0/150
提交评论