版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章文件本章主要内容1.能够建立新文件和更新文件内容2.能够从顺序文件中读取数据3.了解对文件进行操作的步骤4.熟悉对顺序文件进行操作的方式5.了解对随机文件进行操作的方式6.了解对文件的低级读写操作第10章文件操作10.1文件的概念
文件就是记载在外部存储器上的数据的集合。
C语言把这些数据的集合看成是字符(或字节)序列。
(或者说C语言是把每一个文件都看作是一个有序的字节流)计算机可处理的文件:源程序,图形文件、音频文件、数据文件等等。按数据的组织形式可分为:文本文件、二进制文件
C语言可以对文本文件和二进制文件进行读写操作。
流——是文件和程序之间通讯的通道
程序可以创建文件和对文件内容进行更新、修改。
程序中所需的数据也可以从另一个文件中获得。10.2文件的操作
对文件的操作方式1.缓冲文件系统(或称为标准I/O)2.非缓冲文件系统(或称为系统I/O)
缓冲文件系统会自动地在内存中开辟一个文件缓冲区,
对文件进行处理时,通过文件缓冲区进行输入/输出操作。
非缓冲文件系统不设置缓冲区,由程序设置缓冲区的大小。10.2文件的操作10.2.1文件的打开与关闭
文件指针:用于对文件进行操作。
文件指针的类型为结构类型,已由系统定义。
类型名为FILE(在头文件stdio.h中),定义形式如下:typedefstruct{short level; /*fillemptylevelofbuffer*/unsigned flags; /*Filestatusflags*/char fd /*Filedescriptor*/unsignedchar hold; /*ungetccharifnobuffer*/short bsize; /*Buffersizeunsignedchar *buffer; /*Datatransferbuffer*/unsignedchar *curp; /*Currentactivepointer*/unsigned istemp; /*Temporaryfileindicator*/short token; /*Usedforvaliditychecking*/}FILE;
/*ThisistheFILEobject*/10.2文件的操作10.2.1文件的打开与关闭
文件操作之前必须要先定义文件指针变量。
定义形式:FILE*<变量标识符>;如:FILE*fp;
则:fp为指向FILE类型结构体的指针变量。
文件操作步骤:打开文件——对文件进行读/写操作——关闭文件
文件打开函数原型FILE*fopen(char*filename,char*type);
(注:filename代表的是一个文件名,该字符串是一个合法的带有路径的文件名;type字符串代表的是对文件的操作模式,不同的模式对应不同的操作。)
常用的文本文件打开模式有6种:r
以只读方式打开一个文本文件w
以只写方式打开一个文本文件a
以追加方式打开一个文本文件r+
以读/写方式打开一个文本文件w+
以读/写方式建立一个新的文本文件a+
以读/写方式打开一个文本文件常用的文件的操作模式:rb
以只读方式打开一个二进制文件wb
以只写方式打开一个二进制文件ab
以追加方式打开一个二进制文件rb+
以读/写方式打开一个二进制文件wb+
以读/写方式建立一个新的二进制文件ab+
以读/写方式打开一个二进制文件
注:并不是所有的C语言系统都具备这些文件操作模式,与编译器有关。10.2文件的操作10.2文件的操作如有:FILE*fp;fp=fopen(“文件名”,“打开模式”);作用:打开由“文件名”指定的文件,
以指定的“打开模式”对文件进行访问。若正确,则返回一个指向该文件的指针。若错误,则返回错误标志NULL。
当fp指向某一具体的文件后,可通过该文件变量的成员信息访问文件的其它属性。例1:阅读【例10-1】的程序,了解文件正确的打开方式。思考和分析程序中存在的问题。
C语言规定:fopen()函数中的“文件名”可以在当前工作目录(相对路径)下;也可以在指定路径(绝对路径)下。如:fopen(“myfile.c","r");fopen("c:\\DOS\\config.sys","r");1.文件“test.txt”所在位置如何?2.在程序结束之前并没有关闭被打开的文件,文件会不会遭到破坏?3.文件test.txt的内容是什么?10.2文件的操作分析10.2文件的操作10.2.2文件操作的错误检测
文件操作的错误检测体现在两个地方:1.对文件的打开状态进行正确性判断;2.对文件进行读写操作进行正确性判断。
C语言提供了两个文件检测函数1.判断文件流上是否有错intferror(FILE*stream);
若正确,返回值为0,若发生错误,返回值为非零值。2.判断是否到达文件尾intfeof(FIEL*stream);
若stream所指向的文件到达文件尾,则返回值为非零值;
否则,返回值为0。10.2文件的操作10.2.3文件的顺序读写
顺序读写是指文件被打开后,按照数据流的先后顺序对文件进行读/写操作。
每读/写一次后,文件指针自动指向下一个读/写位置。
通过调用系统函数实现对文件的读/写操作,系统函数的声明stdio.h中。
常用的顺序读写函数(一)从文件读一个字符:fgetc(FILE*stream);若正确:返回字符ch若错误或到达文件尾:返回EOF2.向文件写一个字符:charfputc(charch,FILE*stream);若正确:返回一个非负数若错误:返回EOF10.2文件的操作例2:阅读和分析【例10-2】
编写一个程序,将当前目录下的文本文件输出到屏幕上。上机验证程序的功能。例3:阅读和分析【例10-3】
编写一个程序,把从键盘输入的内容保存到文件中去。上机验证程序的功能。思考:上面两种文件操作方式有什么不同。
注:文本文件的内容只有文字、符号、数字,不含图片、格式、排版等内容,能直接用记事本打开读懂,如:*.txt、*.c等就是文本文件。
10.2文件的操作
常用的顺序读写函数(二)2.从文件中读取字符串:char*fgets(char*string,intn,FILE*stream);
作用:从stream所指的文件中读取n−1个字符,放到以string为起始地址的存储空间,若在n−1个字符前,遇到回车换行符或文件结束符,则操作结束,并在读入的字符串后面加一个“\0”字符。
若操作成功,返回值为str的地址;
若出错,返回值为NULL。向文件写入字符串:intfputs(char*str,FILE*stream);
作用:将stream所表示的字符串内容(不包含字符串最后的“\0”)输出到str所指的文件中去.
若操作成功,返回一个非负数;
若出错,返回EOF。10.2文件的操作例4:阅读和分析程序【例10-4】上机验证程序的功能,了解文件读取方式。例5:阅读和分析程序【例10-5】上机验证程序的功能,了解文件的写入方式。思考:上面两种文件操作方式有什么意义。10.2文件的操作
常用的顺序读写函数(三)3.按格式化读取字符:intfscanf(FILE*stream,char*format,&arg1,&arg2,…,&argn);
按格式化写入字符:intfprinft(FILE*stream,char*format,arg1,arg2,…argn);例6:阅读和分析程序【例10-6】上机验证程序的功能。思考:比较【例10-4】的程序有什么不同?例7:阅读和分析程序【例10-7】上机验证程序的功能。思考:比较【例10-5】的程序有什么不同?10.2文件的操作10.2.4文件的随机读写
对文件进行读写操作时,可以对文件中指定位置的信息进行读写操作。
需要对文件进行准确定位,再对文件进行随机读写。
适合于具有固定长度记录的文件。
系统提供的随机读写的定位函数原型在stdio.h中。10.2文件的操作1.文件定位函数原型intfseek(FILE*stream,longoffset,intposition);如:fseek(fp,d,pos);作用:把文件指针fp移动到距pos为d个字节的地方。若定位成功,返回值为0;若定位失败,返回非零值。
d为位移量,d的取值有以下两种情况:①d>0,表示fp向前(向文件尾)移动;②d<0,表示fp向后(向文件头)移动。
pos为起始位置,pos的取值有以下3种可能的情况:①pos=0或pos=SEEK_SET,表示文件指针在文件的开始处;②pos=1或pos=SEEK_CUR,表示文件指针在当前文件指针位置;③pos=2或pos=SEEK_END,表示文件指针在文件尾。10.2文件的操作2.位置函数原型longintftell(FILE*stream);
如:loc=ftell(fp);作用:将fp所指位置距文件头的偏移量的值赋予长整型变量loc。若正确,则loc≥0;若出错,则loc=−1L3.重定位函数原型voidrewind(FILE*stream);
如:rewind(fp);作用:将文件指针fp重新指向文件的开始处。10.2文件的操作
文件随机读写函数:intfread(void*buf,intsize,intcount,FILE*stream);作用:从stream所指的文件中读取count个数据项;
每一个数据项的长度为size个字节;
放到由buf所指的块中(buf通常为字符数组);
读取的字节总数为size×count。若成功,返回值为数据项数(count的值);若出错或到达文件尾,返回值小于count。10.2文件的操作例8:阅读和分析程序【例10-8】上机验证程序的功能。思考:比较【例10-4】和【例10-6】的程序有什么不同?例9:阅读和分析程序【例10-9】上机验证程序的功能。思考:比较【例10-5】和【例10-7】的程序有什么不同?intfwrite(void*buf,intsize,intcount,FILE*stream);作用:将cou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化工工艺试验工持续改进评优考核试卷含答案
- 化学镀银工常识测试考核试卷含答案
- 肥皂制造工岗前创新思维考核试卷含答案
- 石膏装饰板加工工岗前内部控制考核试卷含答案
- 热拉丝工复测模拟考核试卷含答案
- 过滤与分离机械装配调试工标准化模拟考核试卷含答案
- 石英晶体生长设备操作工常识考核试卷含答案
- 水泥生产中控员安全检查强化考核试卷含答案
- 井下充填制备工诚信品质竞赛考核试卷含答案
- 制药菌种培育工岗前岗位晋升考核试卷含答案
- 以竹代塑产品生产建设项目实施方案
- 记账实操-咖喱牛肉制作成本核算
- 《大学生劳动教育(实践版)》全套教学课件
- (正式版)DB61∕T 5079-2023 《城市轨道交通工程沿线土遗址振动控制与监测标准》
- 满分教育专用题库及答案
- 汽车托管与租赁合同协议
- 红楼梦中的平儿
- 门店巡场管理办法
- 水电站水工建构筑物维护检修工公司招聘笔试题库及答案
- 涉爆知识培训
- 地方扑火队管理制度
评论
0/150
提交评论