精通C程序设计第十一章文件操作.ppt
- 文档编号:2123609
- 上传时间:2022-10-27
- 格式:PPT
- 页数:47
- 大小:196.50KB
精通C程序设计第十一章文件操作.ppt
《精通C程序设计第十一章文件操作.ppt》由会员分享,可在线阅读,更多相关《精通C程序设计第十一章文件操作.ppt(47页珍藏版)》请在冰豆网上搜索。
Ch11-1第十一第十一章章文件操作文件操作本章内容提要本章内容提要:
11.1C语言文件操作的基本概念语言文件操作的基本概念11.2C语言文件操作数据结构语言文件操作数据结构11.3C语言文件操作函数语言文件操作函数11.4字符文件应用字符文件应用11.5二进制文件应用二进制文件应用重点小结重点小结作业作业Ch11-211.1C语言文件操作的基本概念语言文件操作的基本概念11.1.1C语言流文件的概念语言流文件的概念所谓流流(stream)是指C语言文件操作函数与物理文件之间的一种数据结构与操作规程。
一般说来,流是指文件按存储顺序形成的字节序列字节序列。
1.缓冲文件缓冲文件内存中开辟一个适当大小的内存块称为文件缓冲区,用来保存文件一部分数据,读写文件不直接针对物理文件本身,而是对缓冲区进行,由内部程序实现缓冲区与文件的数据更新。
Ch11-311.1C语言文件操作的基本概念语言文件操作的基本概念(续续1)Ch11-42.非缓冲文件非缓冲文件任何读写操作直接针对物理文件进行。
缓冲文件可有效减低磁盘的访问频度。
C语言两种文件操作方式都提供,但我们主要应用的是缓冲文件(即流文件)。
ANSIC标准决定不采用非缓冲文件系统而只采用缓冲文件系统,因此本章将只介绍C语言的缓冲文件操作函数。
通常所说的流文件流文件就是指指ANSI标准标准的字节流缓冲文件的字节流缓冲文件。
11.1C语言文件操作的基本概念语言文件操作的基本概念(续续2)Ch11-511.1C语言文件操作的基本概念语言文件操作的基本概念(续续3完完)11.1.2顺序文件与随机文件操作顺序文件与随机文件操作1.顺序文件顺序文件读文件或者写文件操作只能按照顺序进行。
对于字节流文件,即读/写文件的第i个字节前必须顺序读出/写入前面的i-1个字节。
2.随机文件随机文件对于字节流文件允许直接读/写文件的第i个字节。
C语言的文件操作函数两种方式都可以实现语言的文件操作函数两种方式都可以实现。
Ch11-611.2C语言文件操作数据结构语言文件操作数据结构1.FILE结构类型结构类型定义于stdio.h中,是文件操作的句柄结构,我们无需关心该结构的详细内容,C函数通过一个FILE*型指针,对文件进行操作。
例如:
例如:
FILE*fp,*fr,*fw;2.空文件指针常量空文件指针常量:
NULL等价于03.文件读操作结束文件读操作结束(失败失败)标志常量标志常量:
EOF等价于-1以上两个常量均已定义于stdio.h中。
Ch11-711.2C语言文件操作数据结构语言文件操作数据结构(续续1完完)4.系统标准输入系统标准输入/输出文件输出文件已定义于stdio.h中,用户可在程序中直接使用。
(1)stdin:
标准输入文件,即键盘输入(r型)
(2)stdout:
标准输出文件,即显示屏(w型)(3)stderr:
标准错误输出文件,一般指显示屏(w型)Ch11-811.3C语言文件操作函数语言文件操作函数1.打开文件打开文件函数原形FILE*fopen(char*fname,char*mode);
(1)fname:
指文件名,可包含盘符与路径信息如如:
ABC.TXTC:
userabc.txt
(2)返回值为NULL表明文件打开失败;否则打开成功,为一个有效的FILE*型指针值。
(3)mode:
文件打开方式字符串Ch11-911.3C语言文件操作函数语言文件操作函数(续续1)打开方式串操作特点字符文件二进制文件r或rtrb只读方式,要求文件必须已经存在要求文件必须已经存在w或wtwb只写方式,文件存在,则截取文件长度为0,即删除文件原有数据,重建文件;文件不存在则建立新的文件a或atab添加写方式,文件存在,则只能从文件结尾开始写入数据;文件不存在,则新建r+或rt+rb+读写方式,要要求求文文件件必必须须已已经经存存在在,可以进行全文读、改写、添加写。
wb+写读方式,文件存在,则截取文件长度为0,文件不存在,则建新文件,允许读出写入的数据和改写已经写入的数据。
a+或at+ab+添加可读方式,文件存在,只能添加写,文件不存在,则建立新文件;允许读出添加写入的数据和改写添加写入的数据。
w+或wt+Ch11-1011.3C语言文件操作函数语言文件操作函数(续续2)说明说明说明说明:
(a)打开文件失败的可能情况主要有:
I对于含字母r的打开方式,失败情况主要是:
文件不存在;文件名或路径名有错误文件不存在;文件名或路径名有错误对含对含r方式打开的文件,一定要测试文件是否打开方式打开的文件,一定要测试文件是否打开成功,否则会带着错误正常运行下去成功,否则会带着错误正常运行下去II对于含有w或a字母的打开方式,失败的情况主要是:
磁盘空间不足或磁盘故障磁盘空间不足或磁盘故障(b)打开方式串中的字母必须小写字母必须小写,不能够大写不能够大写。
Ch11-1111.3C语言文件操作函数语言文件操作函数(续续3)例如:
例如:
FILE*fr,*fw;fr=fopen(abc.txt,r);if(fr=NULL)printf(Fileopenerror.n);exit(0);fw=fopen(abc.bak,w);2.关闭文件关闭文件:
(1)intfclose(FILE*fp);/*一般不用返回值一般不用返回值*/Ch11-1211.3C语言文件操作函数语言文件操作函数(续续4)如如:
fclose(fr);fclose(fw);对于写入方式打开的文件,一定要用fclose关闭文件,否则可能有数据未从缓冲区写入磁盘。
原则上,fclose与fopen配对使用。
(2)intfcloseall();该函数关闭本应用程序所有打开的文件。
3.文件读写函数文件读写函数
(1)单字节读写函数单字节读写函数(字符与二进制文件都适用字符与二进制文件都适用)Ch11-1311.3C语言文件操作函数语言文件操作函数(续续5)intfputc(intch,FILE*fp);ch的低8位(1字节)写入文件。
成功成功:
返回写入的该字节(0255);失败失败:
返回EOF(-1)intfgetc(FILE*fp);从文件中读出一个字节并返回。
成功成功:
函数返回值为0255,即读出的字节;失败失败:
返回值为EOF(-1)。
Ch11-1411.3C语言文件操作函数语言文件操作函数(续续6)
(2)字符串读写函数字符串读写函数(字符与二进制文件均适用字符与二进制文件均适用)charfgets(chars,intn,FILEfp);从文件中连续读出n1个字符存入字符指针s开始的内存,最后自动加上一个字符0。
成功成功:
函数返回值为s;失败失败:
返回值为NULL。
intfputs(chars,FILEfp);将字符串s写入文件(不写入0)。
成功成功:
函数返回非负整数非负整数;失败失败:
返回EOF。
Ch11-1511.3C语言文件操作函数语言文件操作函数(续续7)(3)格式化读写函数格式化读写函数(仅字符文件适用仅字符文件适用)intfscanf(FILEfp,charformat,&argument.);intfprintf(FILEfp,charformat,expression.);与scanf与printf的用法完全一样,但是从字符文件读写数据。
fscanf(stdin,.);scanf(.);fprintf(stdout,.);printf(.);Ch11-1611.3C语言文件操作函数语言文件操作函数(续续8)(4)字节块读写函数字节块读写函数(仅二进制文件适用仅二进制文件适用)unsignedfread(voidbuffer,unsignedsize,unsignedcount,FILEfp);从文件中连续读出sizecount个字节存入指针buffer开始的内存。
返回返回实际读出的字节数实际读出的字节数。
unsignedfwrite(voidbuffer,unsignedsize,unsignedcount,FILEfp);从内存地址buffer开始,写sizecount字节到文件中。
返回返回实际写入文件的字节数实际写入文件的字节数。
Ch11-1711.3C语言文件操作函数语言文件操作函数(续续9)4.数据读写位置指针操作函数数据读写位置指针操作函数
(1)文件数据读写位置指针的概念文件数据读写位置指针的概念字节流文件的读写位置以字节为单位编号。
长度为n字节的文件,第一字节的编号为0,最后一个字节的编号为n-1,因此文件数据读写位置指针的有效范围为0n-1。
(2)数据读写位置指针的自动移动规则数据读写位置指针的自动移动规则(a)任何方式打开文件时,指针初态都是0;Ch11-1811.3C语言文件操作函数语言文件操作函数(续续10)(b)含a的打开方式,只要进行写操作,则指针自动移到文件当前结束位置即位置n(n为当前文件已有字节数)处。
(c)进行任何读写操作时,指针总是从当前位置开始读写,读写结束后,指针当前位置自动移动到读写之后的位置。
(3)数据读写位置指针的操作函数数据读写位置指针的操作函数voidrewind(FILEfp);重置当前读写位置指针为0。
Ch11-1911.3C语言文件操作函数语言文件操作函数(续续11)longftell(FILE*fp);返回当前文件读写位置指针值。
intfseek(FILE*fp,longoffset,intstartpos);读写位置指针移动到偏移startpos指定的位置offset字节处。
startpos=0SEEK_SET文件开始处(位置0)1SEEK_CUR当前指针位置处2SEEK_END文件结尾处(位置n)n为文件当前字节长度Ch11-2011.3C语言文件操作函数语言文件操作函数(续续12)SEEK_SETSEEK_CURSEEK_ENDCh11-2111.3C语言文件操作函数语言文件操作函数(续续13)5.读操作失败标志函数读操作失败标志函数intfeof(FILEfp);当且仅当文件当前读写位置指针在有效数据区以外并进行了读操作,函数返回值不等于0,其余情况,函数的返回值是0。
注注注注意意意意:
执行fseek、rewind或者任何写操作后,该函数的返回值将是0。
6.可读可读/可写打开方式中的读写操作切换可写打开方式中的读写操作切换Ch11-2211.3C语言文件操作函数语言文件操作函数(续续14)fopen函数中的打开方式串若含有+号,允许对文件进行读操作和写操作。
C语语言言规规定定,读读操操作作和和写写操操作切换时,中间必须间隔作切换时,中间必须间隔fseek函数函数。
例如例如:
字节流为ABCDEFGH/*以以r+方式打开文件方式打开文件*/当前读写位置指针当前读写位置指针执行语句charch=fgetc(fp);/*ch得到得到E*/ABCDEFGH/*读写位置指针指向读写位置指针指向F*/当前读写位置指针当前读写位置指针Ch11-2311.3C语言文件操作函数语言文件操作函数(续续15)此时若将F改写为f,则fseek(fp,0L,SEEK_CUR);/指针原地踏步指针原地踏步/fputc(f,fp);/*若不执行前面的若不执行前面的fseek,此句无法正常写入此句无法正常写入*/ABCDEfGH/*读写位置指针指向读写位置指针指向G*/当前读写位置指针当前读写位置指针Ch11-2411.3C语言文件操作函数语言文件操作函数(续续16)7.字符文件与二进制文件操作的区别字符文件与二进制文件操作的区别若文件以字字符符文文件件方方式式打开时,当向文件写写入入字字节节n(10),写操作函数(fputc,fputs,fprintf)先先自自动动写写入入字字符符r(13);当从文件读到字节r(13)时,读操作函数(fgetc,fgets,fscanf)不不返返回回r而而是是跳跳过过r读读出出紧紧跟跟在在它它后后面面的的字字节节n(10),并并返返回回n。
二二进进制制文文件件打打开开方方式式没有上述特性,即每每个个字字节都一视同仁节都一视
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精通 程序设计 第十一 文件 操作