版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章文件11.4文件的读写11.1文件概述11.2文件指针本章主要内容11.3文件打开与关闭11.5文件的定位11.6文件状态检测函数11.1
文件概述
11.1.1文件的定义:所谓“文件”是指存储在外部介质上的数据集合,操作系统是以文件为单位组织和管理数据的。也就是说,当我们要长期保存一些数据时,必须以文件的方式存储在外存上,对文件中的数据,可以通过编写的程序进行调用。C语言将文件看作一个字节序列,这个字节序列也被称为“字节流”,因此C语言文件又称为“流式文件”。C语言中常用的标准设备文件名如下:CON(或KYBDD):键盘(输入)PRN(或LPT1):打印机CON(或SCRN):显示器(输出)AUX(或COM1):异步通信口11.1
文件概述
11.1.2文件的分类:1.按文件内容划分从存储内容上看,文件分为两大类:程序文件和数据文件。程序文件中存储的是程序代码或计算机指令,如平常所说的可执行文件、目标文件及源程序文件等,数据文件中只包含程序文件处理的数据,通常用来保存大量数据,如作为素材使用的图像文件、VCD文件、MP3文件等。2.按存储方式划分从存储方式上看,文件可分为文本文件和二进制文件。文本文件以字符形式存储数据(即存放ASCII码),又称为ASCII文件,二进制文件是按数据在计算机内的存储形式(二进制代码)存放数据的。11.1
文件概述
3.按存储介质划分从存储介质上看,文件可分为磁盘文件、磁带文件、光盘文件以及打印文件等。4.按读写方式划分文件按读写方式可分为顺序读写方式和随机读写方式。顺序读写是指从文件头开始,依次读/写文件的内容,随机读写是指根据需要从任意位置读/写文件的内容,只能进行顺序读写的文件称为顺序文件,可以进行随机读写的文件称为随机文件。11.1.2文件的分类:11.2文件指针所谓缓冲文件系统是指系统自动为程序中的每个正在使用的文件都在内存开辟一个“缓冲区”,当从硬盘文件输入数据时,先将文件中的数据送到“输入缓冲区”,然后再从“输入缓冲区”依次将数据送到程序数据区;在向硬盘文件输出数据时,先将程序数据区中变量或表达式的值送到“输出缓冲区”,等装满缓冲区后才一起输出给硬盘文件缓冲文件系统既可以用来处理文本文件,也可以用来处理二进制文件,缓冲区一般为512个字节,大小与所用的C语言编译系统有关。11.2文件指针11.2文件指针缓冲文件系统为每个正在使用的文件开辟一个“文件信息区”,用来存放文件的有关信息。如:文件当前的读写位置、与该文件对应的内存缓冲区的地址、缓冲区中未被处理的字符数和文件操作方式等。“文件信息区”的这些信息保存在一个结构体类型的变量中,该结构体类型命名为FILE:typedefstruct{......}FILE;当程序中用到某个文件时,系统就为此文件开辟一个FILE类型变量的存储空间。但是,这个存储空间通常不用变量名来标识,而是设置一个指向该结构体变量的指针变量,通过它来访问该结构体变量(信息区)。FILE*fp1,*fp2,*fp3;11.2文件指针某些系统的FILE有如下定义:typedefstruct{shortlevel;/*缓冲区“满/空”的程度*/unsignedflags;/*文件状态标志字*/charfd;/*文件描述符*/unsignedcharhold;/*其他信息*/shortbsize;/*缓冲区大小*/unsignedchar*buffer;/*数据缓冲区的位置*/unsignedchar*curp;/*当前读写位置指针*/unsignedistemp;
/*临时文件指示器*/shorttoken;/*有效性检查*/}FILE;11.3文件打开与关闭在C语言程序中,把数据从文件读入到内存的操作称为“输入”或“读”操作;把内存中的数据输出到文件的操作称为“输出”或“写”操作。11.3.1文件打开函数文件在使用之前必须先打开。所谓“打开”其实是在程序和文件之间建立起联系,程序把所要操作的文件信息读取出来,文件打开用fopen函数实现,它的一般使用方法为:FILE*fp;fp=fopen(filename,mode);11.3文件打开与关闭11.3.1文件打开函数fp是一个文件指针;filename是一个文件名;mode指出打开该文件的模式,它的取值及含义如表11-1中所列。11.3文件打开与关闭11.3.2文件关闭函数关闭文件就是在文件处理完之后,切断缓冲区与外存文件的联系。使用的函数是fclose,其一般格式是:fclose(文件指针);当顺利执行了关闭操作时,函数返回值为0,否则返回一个非0值,该函数一次只能关闭一个文件,若要关闭多个文件,必须多次使用。11.3文件打开与关闭11.3.4缓冲区更新函数向文件写入数据时,数据首先被写入到缓冲区中,随后才被写入到文件中,在这个过程中,数据可能一直存放在缓冲区中,直到程序结束或缓冲区满了才被写入到文件中.这可能会导致数据丢失或不一致的情况,为了确保数据被写入文件中,需要调用刷新缓冲区函数fflush,其一般格式是:int
fflush(FILE*stream);fflush函数会将缓冲区中的内容写到stream所指的文件中去,若stream为NULL,则会将所有打开的文件进行数据更新。fflush(stdin):刷新缓冲区,将缓冲区内的数据清空并丢弃。fflush(stdout):刷新缓冲区,将缓冲区内的数据输出到设备。11.4文件的读写11.4.1字符读写函数从指定文件中读取一个字符,同时将读写的位置指针移动到下一个字符的位置,则需要调用函数fgetc,它的格式为:ch=fgetc(fp);该函数从fp指向的文件中读取一个字符并将它保存在变量ch中。如果要将一个字符写入到指定文件中,同时将读写的位置指针移动到下一个写入的位置,则需要调用函数fputc,它的格式为:fputc(ch,fp);该函数将字符ch输出到fp所指向的文件中。11.4文件的读写11.4.2字符串读写函数从文件中读取一串字符,并将其保存到对应的内存变量中的函数为fgets,它的使用格式如下:fgets(str,n,fp);该函数从fp指向的文件中读取n-1个字符并将其保存在str指向的内存单元中,并在其后自动追加结束标志'\0'。如果要将一组字符串从内存单写入到文件中,则需要调用的函数为fputs,它的使用格式如下:fputs(str,fp);该函数把str表示的字符串写入到由fp指向的文件中(不写字符串结束符'\0')。11.4文件的读写11.4.3数据块读写函数在遇到大数据文件的时候,单字节读写,字符串读写都无法满足实际的需求,此时需要进行大块批量读写操作,C语言为此设置了数据块读取函数fread和数据块写入函数fwrite。fread函数的使用格式为:fread(buffer,size,count,fp);该函数用来从文件中读取指定字节数的数据,并将此数据读取到指定的缓冲区(数组、变量、结构体等))内。fwrite函数的使用格式为:fwrite(buffer,size,count,fp);该函数用来向文件中写入指定字节数的数据。11.4文件的读写11.4.4格式化读写函数在遇到大数据文件的时候,单字节读写,字符串读写都无法满足实际的需求,此时需要进行大块批量读写操作,C语言为此设置了数据块读取函数fread和数据块写入函数fwrite。fread函数的使用格式为:fread(buffer,size,count,fp);该函数用来从文件中读取指定字节数的数据,并将此数据读取到指定的缓冲区(数组、变量、结构体等))内。fwrite函数的使用格式为:fwrite(buffer,size,count,fp);该函数用来向文件中写入指定字节数的数据。11.5文件的定位11.5.1重新返回函数在操作文件读写的时候,在某些情况下,需要将文件位置指针返回到文件起始位置,这时就需要调用重新返回函数rewind,它的使用格式为:voidrewind(FILE*stream);该函数用于将文件指针重新指向文件的开头,同时清除和文件流相关的错误和EOF标记,相当于调用fseek(stream,0,SEEK_SET),其中的参数stream为已打开文件的指针。11.5文件的定位11.5.2文件定位函数在读写文件过程中,可以将文件位置指针任意定位到特定位置,这就是文件定位函数fseek,它的使用格式为:intfseek(FILE*filepointer,longoffset,intwhence)该函数的作用就是将文件指针所指向的文件的读写位置指针移动到特定的位置,其中offset代表了要移动的偏移量,whence代表了移动到初始地点。offset的值假如是正数就会往whence右边移动,假如是负数就会往whence左边移动。11.6文件状态检测函数11.6.1文件结束检测函数在读文件过程中,需要判断是否已经将文件内的数据全部读取完毕,此时调用的函数为feof()函数,它的使用格式为:intfeof(FILE*fp)该函数用来判断数据读取是否达到文件尾部,其中fp为打开的文件指针,如果检测到数据读取已经到文件结尾,则返回1,如果检测到未达到尾部,则返回0。11.6文件状态检测函数11.6.2读写文件出错检测函数为了确保文件的数据无误,需要在文件的读写过程中进行监控,此时调用的错误检测函数是ferror,它的使用格式为:使用格式:intferror(FILE*fp)该函数是用来检查由fp指定的文件在读写时是否出错,其中fp为打开的文件指针,如果文件在读写过程中出现异常,则返回1,如果读写顺利,则返回0。11.6文件状态检测函数11.6.3文件出错标志和文件结束标志函数文件的读写过程中如果有误,则ferror返回值将会置为1,将此错误标志位清零,则需要调用函数clearerr,它的使用格式为:voidclearerr(FILE*fp)该函数的作用是清除由fp指定文件的错误标志,其中fp为打开的文件指针,此函数无返回值。例如在调用一个输入输出函数时出现了错误,ferror函数值为一个非零值,此时如果调用clearerr(fp),则ferror(fp)的值变
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/BAX 0006.2-2025视频图像感知智能应用适配技术要求 第2部分:算法适配
- 人教版八年级下册英语 10分钟练习 Unit5 第四部分 期末复习●基础巩固与语法综合 课件
- 湖南省娄底市涟源市2026-2027学年高二上学期开学考试英语试卷
- T/AHMS 0003-2023气象文物价值分类指南
- 家用冰箱蒸发器生产线建设项目可行性研究报告
- 年产500套氢燃料电池备用电源系统生产项目可行性研究报告
- 中级基础2026冲刺5会计
- 中国医药经理人薪酬统计表
- 中层管理能力之三情绪管理
- 学会学习学会生活主题班会
- 2026年新高考I卷语文试卷(原卷+答案)
- 统编版2026新教材道德与法治五年级上册第一单元第一课开天辟地的大事变教学设计
- 2026年全国网络安全行业职业技能大赛(网络安全管理员赛项)考试题库(含答案)(附答案)
- 福建省福州市2027届高三上学期开学适应性练习英语试卷(含答案)
- GB/T 31880-2026检验检测机构诚信基本要求
- 译林版小学英语二年级上册全册课件
- GB/T 15820-1995聚乙烯压力管材与管件连接的耐拉拔试验
- 本科毕业论文的写作课件
- 技术的性质 课件 高中通用技术苏教版(2019)必修《技术与设计1》
- 食品中天然有毒物质与食品安全精课件
- 社会工作实务(中级)1要点课件
评论
0/150
提交评论