《C语言程序设计》-电子教案-任正云 ch9

上传人:E**** 文档编号:89400359 上传时间:2019-05-24 格式:PPT 页数:51 大小:649KB
返回 下载 相关 举报
《C语言程序设计》-电子教案-任正云 ch9_第1页
第1页 / 共51页
《C语言程序设计》-电子教案-任正云 ch9_第2页
第2页 / 共51页
《C语言程序设计》-电子教案-任正云 ch9_第3页
第3页 / 共51页
《C语言程序设计》-电子教案-任正云 ch9_第4页
第4页 / 共51页
《C语言程序设计》-电子教案-任正云 ch9_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《《C语言程序设计》-电子教案-任正云 ch9》由会员分享,可在线阅读,更多相关《《C语言程序设计》-电子教案-任正云 ch9(51页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计,主编 任正云 中国水利水电出版社,第9章 文件,文件是组织在外部存储介质上的一组数据的集合。,1. 是对一个数据集合可以用一个名字命名;,2.是可以保存在存储介质上。计算机操作系统以文件的形式来管理外部介质上的数据。,它有两个特征:,9.1.1 文件的类型,文件的类型,根据数据的组织形式,数据文件可分为ASCII文件和二进制文件。,ASC文件:,二进制文件:,又称为文本(text)文件,它的每一个字节放一个ASCII代码,代表一个字符。,12580:,把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。,9.1.2 文件名,文件标识包括三个部分:文件路径、文件名主干、文件

2、后缀。,文件路径表示文件在外部存储设备中的位置。,文件标识常常被称为文件名。,d:cctemp filel .dat,文件路径,注意:,文件主干名,文件后缀,(1)文件名主干的命名规则遵循标识符的命名规则。,(2)后缀用来表示文件的性质,一般不超过3个字母。,9.1.3 文件缓冲区和非缓冲文件系统,在缓冲文件系统中,系统对文件进行读写之前首先在内存区开辟一个称作缓冲区的专用内存区域。从内存向磁盘写文件时必须先写入缓冲区,装满缓冲区后才一起写到磁盘上去;从磁盘读文件时必须先把一批数据读到缓冲区(充满缓冲区),然后再从缓冲区将数据逐个送到用户数据区。,9.1.3 文件缓冲区和非缓冲文件系统,在非缓

3、冲文件系统中,文件的处理不自动开辟确定大小的缓冲区,而是由程序设定缓冲区。一般用缓冲文件系统进行的输入/输出称为高级磁盘输入/输出。用非缓冲文件系统进行的输入/输出称为低级(低层)输入/输出。ANSI C标准采用缓冲文件系统,现代的操作系统也广泛采用缓冲型文件系统。,9.1.4 文件类型指针,C语言程序可以同时处理多个文件,为了对每一个文件进行有效的管理,在打开一个文件时,系统会自动在内存中开辟一个区,用来存放文件的有关信息(如文件名、文件状态等)。,文件的有关信息保持在一个结构体变量中,该结构体是由系统定义的,取名为FILE。,9.1.4 文件类型指针,typedef struct shor

4、t level; unsigned slags; char fd; unsigned char hold; short bsize; unsigned char *buffer; unsigned char *curp; unsigned istemp; short token; FILE;,/*用typedef指定文件类型名FILE*/,/*缓冲区“满“或“空“的程度*/,/*文件状态标志*/,/*文件描述符*/,/*如无缓冲区不读取字符*/,/*缓冲区的大小*/,/*数据缓冲区的位置*/,/*指针,当前的指向*/,/*临时文件,指示器*/,/*用于有效性检查*/,/*指定的新类型名为FIL

5、E*/,9.1.4 文件类型指针,在标准输入输出库中,系统定义了3个FILE型指针变量:,(1)stdio(标准输入文件指针),指向在内存中与键盘相应的文件信息区,因此,用它进行输入就蕴涵了从键盘输入。,(3)stderr(标准错误文件指针),用来输出出错信息,它也指向在内存中与显示器屏幕相应的文件信息区,因此,在程序运行时的出错信息就输出到显示器屏幕。,(2)stdout(标准输出文件指针),指向在内存中与显示器屏幕相应的文件信息区,因此,用它进行输出就蕴涵了输出到显示器屏幕。,这3个文件类型指针变量称为标准文件(standard file)指针,有时为了简化,也称为标准文件。,9.2 文件

6、的打开与关闭,打开:,关闭:,是指为文件建立相应的信息区(用来存放有关文件信息)和文件缓冲区(用来暂时存放输入输出的数据),并建立文件和它们之间的联系,这样,就可以对文件进行读写操作。,是指撤销文件信息区和文件缓冲区,断开文件与内存之间的联系,显然就无法对文件进行读写操作了。,9.2.1 文件的打开,fopen()函数,(2)作用:,(1)使用格式为:,/*定义文件型指针变量*/,FILE *fp; fp=fopen( “文件名“,“文件使用方式“);,/*使指针变量指向打开的文件信息区*/,以指定的方式打开指定文件。如果文件打开成功,返回一个文件类型指针,如果文件打开失败,则返回一个空指针N

7、ULL。,9.2.1 文件的打开,表9-1 文件使用定义,9.2.1 文件的打开,说明:,(1)文件名应当包含文件的路径、主文件名和文件后缀,即能提供找到文件的相关信息。,由r、w、a、b、+五个字符组成。,(2)文件的使用方式的含义应当清楚。,r(read):,追加数据。,读操作。,写操作。,w(write):,二进制文件。,a(append):,b(binary):,+:,读和写操作。,9.2.1 文件的打开, 如果用“r”方式打开一个文件,该文件必须存在,否则将会出错。, 用“r+”、“w+”、“a+”方式打开的文件既可以用来输入数据,也可以用来输出数据。, 如果用“w”方式打开一个文件

8、,若该文件存在,将会删除原文件,然后建立一个新文件,若该文件不存在,则以指定的文件名建立一个新文件。, 如果向一个已经存在的文件追加新的信息,只能用“a”方式打开,但该文件必须存在,否则将会出错。,9.2.1 文件的打开,通常打开一个文件的方法是:,FILE *文件指针变量 文件指针变量=fopen( “文件名“,“文件使用方式“); IF(=NULL) printf(“cannot open this filen“); exit(0); ,FILE *fp; fp=fopen(“file.txt“,“r“); if(fp=NULL) printf(“cannot open this file

9、n“); exit(0); ,如:,9.2.2 文件的关闭,就是指撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对原来与其相联系的文件进行读写操作,除非再次打开,使该指针变量重新指向该文件。,一般形式为:,关闭:,fclose()函数:,fclose(fp);,fclose(文件指针);,例如:,9.3 文件的顺序读写,文件的操作有三种情况:,(3)文件读/写数据的顺序和数据在文件中的物理顺序是一致的。,(1)当用读/写生成方式打开文件时,文件的位置指针指向文件的开头位置;,(2)当用追加方式打开文件时,文件位置指针指向文件尾,

10、随后所进行的操作都是从文件尾开始的。这种操作方式称为文件的顺序读/写。,读/写生成和写追加。,9.3.1 读写一个字符,1fputc()函数,(4)fputc()函数有一个返回值。若执行成功,则返回所写的字符;若执行失败,则返回EOF。因为常量EOF的值在头文件stdio.h中,被定义为-1。,fputc(ch,fp);,格式:,功能:,把一个字符写到fp所指定的磁盘文件中。,说明:,(1)ch为字符变量或字符常量。,(2)fp为FILE类型的文件指针变量,它由fopen()函数赋初值。,(3)fp所指的文件打开方式必须为“w”或“w+”。,9.3.1 读写一个字符,【例9.1】从键盘输入若干

11、字符,然后逐个把它们送到磁盘文件中去,直到输入“*”为止。,# include“stdio.h“ # include“string.h“ main() char c; FILE *fp; if(fp=fopen(“A2“,“w“)=NULL) puts(“nCant open the file!n“); exit(0); While(c=getchar()!=“*“) fputc(c,fp); fclose(fp); ,9.3.1 读写一个字符,从文件指针fp所指向的文件中读入一个字符,同时将读/写位置指针向前移动1个字节(即指向一个字符)该函数无出错返回值。,(4)fgetc()函数返回一个

12、字符。该字符是从磁盘文件读入的字符。如果读到文件尾,fgetc()函数会返回一个文件结束标志EOF。,2fgetc()函数,格式:,int fgetc(FILE*fp);,功能:,说明:,(1)ch为字符变量,用来接收从磁盘文件读入字符。,(2)fp为FILE类型的文件指针变量,它由fopen()函数赋初值。,(3)fp所指的文件打开方式必须为“r”或“r+”,并且文件必须存在。,9.3.1 读写一个字符,如果把一个指定的磁盘文件从头到尾按顺序读入在屏幕上显示出来。,While(ch=fgetc(fp)!=EOF) putchar(ch);,例1:,例2:,while(!feof(fp) pu

13、tchar(fgetc(fp);,如果把一个指定的二进制文件从头到尾按顺序读入并在屏幕上显示出来。,9.3.1 读写一个字符,【例9.2】将一个指定磁盘文件的内容复制到另一个指定的磁盘文件中。,# include“stdio.h“ # include“string.h“ main() char ch,infile10,outfile10; FILE *inf,*outf; printf (“n Enter source_filename:“); scanf(“%s“,infile); printf (“n Enter target_filename:“); scanf(“%s“,outfile

14、); if(inf=fopen(infile,“r“)=NULL) ,/*字符数组infile,outfile用于存放文件名*/,/*定义两个文件指针*/,/*读入源文件名*/,/*读入源文件名*/,/*以读的方式打开源文件*/,9.3.1 读写一个字符,printf(“Can,t open source_file!n“); exit(0); if(outf=(outfile,“w“)= NULL) printf(“Cant open target_file!n“); exit(0); while (! foef(inf) fputc(fgetc(inf),outf); fclose(inf)

15、; fclose(outf); ,运行情况如下:,/*以写的方式打开源文件*/,/*用fgetc()读出文件内容*/,/*同时用fputc写入到目标文件中*/,Enter source_filename:A1.c (假设源文件为A1.c) Enter target_filename:B1.c (假设源文件为B1.c) 程序运行后,A1.c中的内容就会原样地全部复制到B1.c中。,9.3.2 读写一个字符串,1fputs()函数,(1)str为字符数组或字符型指针,fp为FILE类型的文件指针变量。,格式:,fputs(str,fp);,功能:,把一个字符串写到指定的磁盘文件中。,说明:,(3)

16、fputs()函数带有返回值。若输出成功,返回值为0,否则为非零值。,(2)fputs()函数与前面介绍过的puts()函数类似,只是fputs()可以把某一个字符串输出到指定的文件中,而不限于在终端上显示。,9.3.2 读写一个字符串,2读字符串函数fgets(),(2)fgets()的返回值为str的首地址。若只读到文件尾或出错,则返回空指针NULL。,格式:,fgets(字符数组,n,文件指针变量);,功能:,从指定的磁盘文件中读入一个字符串。,说明:,(1)str为字符数组或字符型指针。fp为FILE 类型的文件指针变量。其具体操作是从fp指向的文件中读取n-1个字符,并存放到字符数组str中。如果在完成读入n-1个字符之前,遇到换行符或EOF,则读入过程立即结束。字符串读入后自动在str的

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

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号