chap10().ppt

上传人:hwp****526 文档编号:84406138 上传时间:2023-04-05 格式:PPT 页数:22 大小:237KB
返回 下载 相关 举报
chap10().ppt_第1页
第1页 / 共22页
chap10().ppt_第2页
第2页 / 共22页
点击查看更多>>
资源描述

《chap10().ppt》由会员分享,可在线阅读,更多相关《chap10().ppt(22页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第第 10 章章 文件文件10.1文件操作库函数文件操作库函数一、一、概述概述C语语言言将将文文件件看看作作是是一一个个字字符符(字字节节)序序列列组组成成的的。分为分为ASCII文件文件和和二进制文件二进制文件两种。两种。C的的“缓缓 冲冲文文件件系系统统”自自动动地地在在内内存存中中开开辟辟一一个个文文件件缓缓冲冲区区,在在对对文文件件进进行行处处理理时时,通通过过文文件件缓缓冲冲区区进进行行输输入入与输出。与输出。程序程序数据区数据区输出输出缓冲区缓冲区输入输入缓冲区缓冲区磁盘磁盘文件文件输出输出输入输入输出输出输入输入內存內存“文文件件指指针针”是是缓缓冲冲文文件件系系统统中中的的一一

2、个个重重要要概概念念。在在C系系统统的的头头文文件件stdio.h中中定定义义了了一一个个名名叫叫FILE(注注意意大大写写!)的的结结构构体体类类型型(其其成成员员反反映映了了对对文文件件进进行行输输入入/输输出操作时的有关信息出操作时的有关信息):typedefstructshortlevel;/*缓冲区饱和程度缓冲区饱和程度*/unsignedflage;/*文件状态标志文件状态标志*/charfd;/*文件号文件号*/unsignedcharhold;/*无缓冲区取消字符输入无缓冲区取消字符输入*/shortbsize;/*缓缓冲冲区区大大小小,缺缺省省值值512*/unsignedc

3、har*buffer;/*缓冲区缓冲区*/unsignedchar*curp;/*当前活动指针当前活动指针*/unsigned istemp;/*草稿文件标识草稿文件标识*/shorttoken;/*作正确性检验作正确性检验*/FILE;二、二、文件类型指针文件类型指针FILEefileMAKFILE;定定义义了了一一个个结结构构体体数数组组efile,程程序序中中最最多多可可使使用用MAKFILE个文件。又如:个文件。又如:FILE*fp;fp为指向为指向FILE类型结构体的指针变量。使类型结构体的指针变量。使fp指指向某一文件结构体变量后,就通过该结构体变量向某一文件结构体变量后,就通过该

4、结构体变量中的文件信息访问该文件。如果有中的文件信息访问该文件。如果有n个文件,一个文件,一般应设般应设n个个FILE类型结构体指针变量指向类型结构体指针变量指向n个文个文件的信息结构体,以实现对文件的访问。件的信息结构体,以实现对文件的访问。有了有了FILE类型之后,就可以用它来定义类型之后,就可以用它来定义FILE类型的变量。如:类型的变量。如:在在对对文文件件读读、写写之之前前必必须须先先打打开开该该文文件件,使使用用结结束束后后应关闭该文件。应关闭该文件。一、一、文件打开函数文件打开函数fopen函数调用格式:函数调用格式:FILE*fp;fp=fopen(“文件名文件名”,“使用方式

5、使用方式”);打开指定的文件,以指定的使用方式进行访问。打开指定的文件,以指定的使用方式进行访问。说明:说明:用用fp指向打开的文件后指向打开的文件后,就可以用它来访问该文件。就可以用它来访问该文件。“文件名文件名”为任何合法的为任何合法的DOS文件名。文件名。有有的的C版版本本只只用用r、w、a,或或只只用用rw、ra而而不不用用r+、w+、a+在在程程序序运运行行时时,系系统统自自动动打打开开三三个个标标准准文文件件stdin、stdout、stderr。10.2文件操作文件操作 r 以只读方式打开一个文本文件 w 以只写方式打开一个文本文件 a 以追加方式打开一个文本文件 r+以读/写方

6、式打开一个文本文件 w+以读/写方式建立一个新的文本文件 a+以读/写方式打开一个文本文件文件的打开模式文件的打开模式 rb 以只读方式打开一个二进制文件 wb 以只写方式打开一个二进制文件 ab 以追加方式打开一个二进制文件 rb+以读/写方式打开一个二进制文件 wb+以读/写方式建立一个新的二进制文件 ab+以读/写方式打开一个二进制文件为了可靠地打开指定的文件为了可靠地打开指定的文件,常用下列方法:常用下列方法:if(fp=fopen(“file1”,“r”)=NULL)printf(“cannotopenthisfilen”);exit(0);二、二、文件关闭函数文件关闭函数fclos

7、e使使用用完完一一个个文文件件后后必必须须关关闭闭它它,以以防防数数据据丢丢失失和和被其它操作误用。被其它操作误用。fclose函数的调用格式:函数的调用格式:fclose(文件指针文件指针);关闭文件时的操作就是使指针与文件关闭文件时的操作就是使指针与文件“脱钩脱钩”。正常。正常关闭时关闭时fclose函数返回函数返回0值,关闭有误时返回非值,关闭有误时返回非0值。值。文本文件中的回车换行符文本文件中的回车换行符rn在输入时转换在输入时转换为一个换行符为一个换行符n;在输出时又将换行符在输出时又将换行符n转换为转换为回车回车r和换行和换行n两个字符。在用二进制文件时两个字符。在用二进制文件时

8、不进行这种转换不进行这种转换.1、fgetc函数函数fgetc函函数数的的功功能能是是从从以以读读或或读读写写方方式式打打开开的的文文件件中中文文件內部指针当前位置件內部指针当前位置读入读入一个字符一个字符。调用格式:。调用格式:ch=fgetc(fp);ch是要读入的字符;是要读入的字符;fp为指向文件的文件类型指针。为指向文件的文件类型指针。2、fputc函数函数fputc函函数数的的功功能能是是将将一一个个字字符符写写入入以以写写方方式式打打开开的的磁磁盘文件中盘文件中文件內部指针当前位置文件內部指针当前位置。调用格式:。调用格式:fputc(ch,fp);ch是要输出的字符;是要输出的

9、字符;fp为指向文件的文件类型指针。为指向文件的文件类型指针。EOF为为标标准准文文件件的的结结束束标标志志(定定义义为为-1)。在在流流式式文文件件中中,文文件件结结束束标标志志可可用用库库函函数数feof(fp)来来判判定定。当当fp指指向向的的文文件件内内部部指指针针遇遇到到文文件件结结束束标标志志时时,feof(fp)=1,否则为否则为0。三、三、文件的读写文件的读写它们是它们是ANSIC标准提供的函数。调用格式为:标准提供的函数。调用格式为:fread(buffer,size,count,fp);fwrite(buffer,size,count,fp);buffer为为指指向向fre

10、ad读读入入数数据据存存放放的的起起始始地地址址或或fwrite输出数据的起始地址的指针。输出数据的起始地址的指针。size为读写的字节数。为读写的字节数。fp为文件类型指针。为文件类型指针。count为读写为读写size字节的数据项的个数。字节的数据项的个数。如如果果fread或或fwrite调调用用成成功功,则则函函数数返返回回值值为为count的值,即输入或输出数据项的完整个数。的值,即输入或输出数据项的完整个数。如如果果文文件件以以二二进进制制形形式式打打开开,则则fread和和fwrite函函数数就就可以读写任意类型的数据。如:可以读写任意类型的数据。如:fread(f,4,2,fp

11、);从从fp所指的文件读入所指的文件读入2个数据存储到实型数组个数据存储到实型数组f中。中。3、fread函数函数和和fwrite函数用来读写数据块函数用来读写数据块调用格式:调用格式:fprintf(文件指针文件指针,格式字符串格式字符串,输出项表输出项表);fscanf(文件指针文件指针,格式字符串格式字符串,输入项表输入项表);fprintf和和fscanf函数与函数与printf和和scanf函数的不同之处函数的不同之处是:前者的对象为磁盘文件,而后者的对象为终端。是:前者的对象为磁盘文件,而后者的对象为终端。5、putw和和getw函数函数(字输入字输入/输出函数输出函数,一个字为两

12、个一个字为两个字节字节)调用格式:调用格式:putw(i,fp);/将整型量将整型量i输出到输出到fp指向的文件指向的文件/i=getw(fp);/从从fp指向的文件中读入一个指向的文件中读入一个字字并赋给整型变量并赋给整型变量i/4、fprintf和和fscanf函数函数fgets函数的调用格式:函数的调用格式:fgets(str,n,fp);从从fp指指向向的的文文件件中中读读入入n1个个字字符符并并放放到到字字符符数组数组str中。该函数的返回值为中。该函数的返回值为str的首地址。的首地址。fputs函数的调用格式:函数的调用格式:fputs(str,fp);将一个字符串输出到将一个字

13、符串输出到fp指向的文件中。这里的指向的文件中。这里的str可以是字符串常量、字符串数组名或字符型可以是字符串常量、字符串数组名或字符型指针。输出成功,函数值为指针。输出成功,函数值为0,失败时为非,失败时为非0。6、fgets和和fputs函数函数例例10.1将一个磁盘文件中的信息复制到另一个磁盘文件将一个磁盘文件中的信息复制到另一个磁盘文件中。中。用带参数的用带参数的main函数编写。函数编写。(演示演示10_1.C)7、读写其它类型的数据读写其它类型的数据ANSIC标标准准的的fread和和fwrite函函数数可可以以读读写写任任何何类类型型的的数数据据。当当用用户户使使用用的的系系统统

14、未未提提供供这这两两个个函函数数时时,可可以以定定义义所所需需的的函函数数。如如以以二二进进制制方方式式写写入入一一个个实数实数num至至fp指向之文件的函数可以定义如下:指向之文件的函数可以定义如下:putfloat(num,fp)floatnum;FILE*fp;char*s;intcount;s=#for(count=0;count4;count+)putc(scount,fp);四、四、文件的定位文件的定位1、rewind函数函数rewind函数的作用是将文件指针重置于文件的开头。函数的作用是将文件指针重置于文件的开头。例例10.2将一磁盘文件显示在屏幕上并复制到另一文件。将一

15、磁盘文件显示在屏幕上并复制到另一文件。(演示演示10_2.C)#include“stdio.h”main()FILE*fp1,*fp2;fp1=fopen(“file1.c”,“r”);fp2=fopen(“file2.c”,“w”);while(!feof(fp1)putchar(fgetc(fp1);rewind(fp1);while(!feof(fp1)fputc(fgetc(fp1),fp2);fclose(fp1);fclose(fp2);C的流式文件既可以顺序读写也可以随机读写。的流式文件既可以顺序读写也可以随机读写。fseek的调用格式:的调用格式:fseek(fp,位移量位移量

16、,起始点起始点);其中:其中:fp为指向文件的指针;为指向文件的指针;起始点起始点代码代码ANSIC标准的指定名标准的指定名文件开头文件开头0SEEK_SET文件当前位置文件当前位置 1SEEK_CUR文件末尾文件末尾2SEEK_END位位移移量量是是以以“起起始始点点”为为基基点点向向前前移移动动的的字字节节数数。ANSIC规规定定在在位位移移量量的的末末尾尾加加上上字字母母L表表示示long型型,以便在读写大于以便在读写大于64K的文件时不致出错。例如:的文件时不致出错。例如:2、fseek函数与文件的随机读写函数与文件的随机读写3、ftell函数函数调用格式:调用格式:i=ftell(f

17、p);该该函函数数得得到到fp指指向向的的流流式式文文件件中中fp的的当当前前位位置置并并赋赋给给变量变量i。如果如果ftell函数的返回值为函数的返回值为1L,表示出错。表示出错。fseek(fp,100L,0);/*将指针移到离文件头将指针移到离文件头100个字节处个字节处*/fseek(fp,50L,1);/*将指针移到离当前位置将指针移到离当前位置50个字节处个字节处*/fseek(fd,10L,1);/*将指针从当前位置倒退将指针从当前位置倒退10个字节个字节*/fseek(fp,10L,2);/*将指针移到文件末倒数将指针移到文件末倒数10个字节处个字节处*/1、ferror函数函

18、数调用格式:调用格式:ferror(fp);该该函函数数用用来来检检查查各各种种输输入入输输出出函函数数(如如fputc、fgetc、fread、fwrite等等)的的操操作作是是否否有有错错。若若有有错错,函函数数的的返回值为非返回值为非0,若无错,函数的返回值为,若无错,函数的返回值为0。2、clearerr函数函数调用格式:调用格式:clearerr(fp);调用该函数后,使文件错误标志和文件结束标志及调用该函数后,使文件错误标志和文件结束标志及ferror(fp)之值均变为之值均变为0。五、五、出错的检查出错的检查 非非缓缓冲冲文文件件系系统统不不属属于于ANSIC标标准准的的范范围围

19、,但但了了解解它它对对于于阅阅读读非非ANSIC标标准准程程序序时时不不致致感感到到困困难。难。缓缓冲冲文文件件系系统统称称为为高高级级磁磁盘盘I/O系系统统,它它通通过过指指针针访访问问文文件件。非非缓缓冲冲文文件件系系统统称称为为低低级级磁磁盘盘I/O系系统统,它它不不是是通通过过指指针针访访问问文文件件,而而是是用用一一个个整整数数代代表一个文件。这个正整数称为表一个文件。这个正整数称为“文件号文件号”。C编编译译系系统统允允许许同同时时最最多多打打开开10个个文文件件,且且按按文件打开的先后顺序自动将文件号定为文件打开的先后顺序自动将文件号定为110。六、六、非缓冲文件系统非缓冲文件系

20、统 调用格式:调用格式:open(文件名文件名,打开方式打开方式);该函数用来打开一个非缓冲文件。该函数用来打开一个非缓冲文件。其中:其中:打开方式打开方式 作用作用0只读只读1只写只写2读读/写写若若打打开开成成功功,该该函函数数返返回回一一个个正正整整数数(文文件件号号),否否则返回则返回1。2、close函数函数调用格式:调用格式:close(fd);关闭由正整数关闭由正整数fd代表的非缓冲文件。代表的非缓冲文件。若关闭成功,该函数返回值为若关闭成功,该函数返回值为0,否则返回值为,否则返回值为1。1、open函数函数 TurboC不不允允许许用用open函函数数建建立立新新文文件件,而

21、而提提供一个供一个creat函数用来建立新文件。调用格式:函数用来建立新文件。调用格式:creat(文件名文件名,打开方式打开方式);若若建建立立成成功功,该该函函数数返返回回一一个个正正整整数数(文文件件号号),否否则返回则返回1。4、read函数函数调用格式:调用格式:read(fd,buf,count);read函函数数的的作作用用是是从从正正整整数数fd代代表表的的非非缓缓冲冲文文件件中中读读出出count个个字字节节的的信信息息到到buf指指向向的的缓缓冲冲区区中中。读读出出成成功功,read函函数数返返回回值值为为读读出出的的字字节节数数,遇遇文文件件结束,结束,read函数返回值

22、为函数返回值为0,否则为,否则为1。3、reat函数函数调用格式:调用格式:write(fd,buf,count);write函函数数的的作作用用是是将将buf指指向向的的缓缓冲冲区区中中count个个字字节节的的信信息息写写入入正正整整数数fd代代表表的的非非缓缓冲冲文文件件中中。写写入入成成功功,write函数返回值为写入的字节数,否则为函数返回值为写入的字节数,否则为1。6、lseek函数和随机读写函数和随机读写lseek函数用来移动文件位置指针。其调用格式:函数用来移动文件位置指针。其调用格式:lseek(文件号文件号,位移量位移量,起始点起始点)lseek函函数数的的作作用用类类似似于于fseek函函数数,不不同同之之处处是是用用文文件号而不是用指针来标识文件。件号而不是用指针来标识文件。例:例:lseek(fd,100L,0);/将将文文件件位位置置指指针针移移到到离离文文件件开开头头100字字节节处处/lseek(fd,10L,1);/将文件位置指针从当前位置倒退将文件位置指针从当前位置倒退10字节字节/5、write函数函数本本章本章习题习题P259 10.37 10.38 10.39

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com