C语言程序设计 教学课件 ppt 作者 978-7-302-24345-8 kj-第12章文件

上传人:E**** 文档编号:89343609 上传时间:2019-05-23 格式:PPT 页数:57 大小:302.50KB
返回 下载 相关 举报
C语言程序设计  教学课件 ppt 作者 978-7-302-24345-8 kj-第12章文件_第1页
第1页 / 共57页
C语言程序设计  教学课件 ppt 作者 978-7-302-24345-8 kj-第12章文件_第2页
第2页 / 共57页
C语言程序设计  教学课件 ppt 作者 978-7-302-24345-8 kj-第12章文件_第3页
第3页 / 共57页
C语言程序设计  教学课件 ppt 作者 978-7-302-24345-8 kj-第12章文件_第4页
第4页 / 共57页
C语言程序设计  教学课件 ppt 作者 978-7-302-24345-8 kj-第12章文件_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 978-7-302-24345-8 kj-第12章文件》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 978-7-302-24345-8 kj-第12章文件(57页珍藏版)》请在金锄头文库上搜索。

1、第1页,第12章 文件,本章概述 本章的学习目标 主要内容,第2页,本章概述,文件操作是C语言程序设计中的重要组成部分。很多应用问题中会用到文件操作。 本章讨论C语言程序设计中的文件操作。包括文件的打开与关闭、文件的定位与检测、文件的读写所使用的各种函数和编程方法。,第3页,本章的学习目标,本章教学目的:理解文件的概念,掌握用来进行文件的打开、关闭、定位、检测、读写操作的方法。 本章教学重点:文件的读写 本章教学难点:文件的定位与检测,第4页,主要内容,12.1 文件概述 12.2 文件的打开与关闭 12.3 文件的定位和检测 12.4 文件的读写 12.5 程序设计举例,第5页,12.1 文

2、件概述 12.1.1 文件,文件是程序设计中的一个重要概念,所谓“文件”是指存储在外部介质(如磁盘)上的一组相关数据的集合,为了便于定位这组数据,通常要为它取一个名称,即文件名。操作系统就是以文件为单位对数据进行管理的,如果想找存储在外部介质上的数据,必须按文件名找到存放该数据的文件,然后再从文件中读取数据。 从用户的角度来看,文件可以分普通文件和设备文件。 普通文件是驻留在外部介质上的有序数据集,它可以是源文件、目标文件、可执行程序,也可是一组待输入的原始数据,或者是一组输出结果。前者通常称为程序文件,后者则可称为数据文件。 设备文件是指与主机相联的各种外部设备,如显示器、键盘等,对于操作系

3、统而言,每一个与主机相联的输入/输出设备都是一个文件,其输入输出等同于文件的读和写。 例如,通常将显示器定义为标准输出文件,将键盘定义为标准输入文件。我们前面使用的printf()、putchar()等C函数就是输出到标准输出文件(即显示器),scanf()、getchar()等C函数就是从标准输入文件(即键盘)输入数据。,第6页,12.1 文件概述 12.1.2 数据文件的存储形式,从文件的编码方式来看,文件可以分为ASCII码文件和二进制文件两种。 ASCII码文件也称为文本文件,这种文件在磁盘中存储时每个字符对应一个字节,存放的是该字符的ASCII码值。 二进制文件是把内存中的数据按其在

4、内存中的存储形式原样输出到磁盘上存放。 ASCII码文件内容可以在屏幕上按字符显示,例如C源程序文件就是ASCII文件,在windows中可以直接用记事本打开阅读。由于ASCII码文件是按字符显示,因此能读懂其内容,而二进制文件虽然有时也能显示在屏幕上,但其内容却无法直接读懂。,第7页,图12.1中,00110001、00110010、00110011、00110100分别是字符1、2、3、4的ASCII码值的二进制形式。,例如,数字1234的几种存储形式如图12.1所示:,第8页,存储内容用ASCII码形式输出时,其字节与字符一一对应,一个字节代表一个字符,便于对字符进行逐个处理,也便于输出

5、字符,但一般占用的存储空间较多,而且要花费转换时间。 用二进制形式输出,可以节省外存空间和转换时间,但一个字节与字符无一一对应关系,不能直接输出字符形式。一般中间结果数据需要暂时保存在外存上,常用二进制文件保存。 因为C文件是一串字节流或二进制流,所以C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制,即在输出时不会自动增加回车换行符以作为记录结束的标志,输入时不以回车换行符作为记录的间隔。我们把这种文件称作“流式文件”。C语言允许对文件存取一个字符,有很强的灵活性。,第9页,12.1.3 标准文件与非标

6、准文件,在老版本的C(如Unix下的C)中对文件的处理方式有两种: 一种是缓冲文件系统又称标准文件系统, 另一种是非缓冲文件系统又称非标准文件系统。,第10页,所谓“缓冲文件系统”是指系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区,从内存向磁盘输出数据时必须先送到内存中的缓冲区,缓冲区装满数据后,再一起送到磁盘中去。同样,从磁盘向内存中读入数据时,则一次从磁盘文件中将一批数据读入到缓冲区,然后再从缓冲区逐个地将数据送到程序数据区(给程序中的变量),如图12.2所示。缓冲区的大小随C的版本不同而不同,一般为512字节。,第11页,所谓“非缓冲文件系统”是指系统不会自动开辟确定大小的缓冲区

7、,而由程序为每个文件设定缓冲区。 C语言中没有专门的输入输出语句,对文件的读写都是用库函数来实现的,ANSI规定了输入输出函数,用它们对文件进行读写。 本章只介绍ANSI C规定的缓冲文件系统,即标准文件系统。,第12页,12.1.4 文件类型指针,在缓冲文件系统中有一个关键概念是“文件类型指针”,每一个存在的文件都在内存中开辟一个区域,用来存放文件的有关信息(如文件的名称、文件状态、文件当前位置等),这些信息保存在一个结构体变量中,该结构体由系统声明,取名为FILE。 Turbo C在stdio.h文件中有以下的类型声明: typedef struct short level; /*缓冲区“

8、满”或“空”的程度*/ unsigned flags; /*文件状态标志*/ char fd; /*文件描述符*/ unsigned char hold; /*如无缓冲区不读取字符*/ short bsize; /*缓冲区的大小*/ unsigned char *buffer; /*数据缓冲区的位置*/ unsigned char *curp; /*指针,当前的指向*/ unsigned istemp; /*临时文件,指示器*/ short token; /*用于有效性检查*/ FILE;,第13页,12.1.4 文件类型指针,定义文件类型指针变量的格式为: FILE *指针变量标识符; 例如

9、: FILE *fp; 上面的定义表示fp是指向文件类型的指针变量。 文件被打开时,系统自动为该文件定义一个FILE类型变量,使该文件与对应的FILE类型变量建立联系。因为fp是指向FILE类型的指针变量,通过fp即可找到存放该文件信息的FILE类型变量,然后按变量提供的信息找到该文件,对该文件实施操作。 习惯上笼统地把fp称为文件类型指针。所谓打开文件就是指建立文件的各种有关信息,并使FILE类型指针指向该文件,以便对文件进行操作。关闭文件则断开FILE类型指针与该文件间的联系,也就禁止对该文件进行操作。,第14页,12.2 文件的打开与关闭,12.2.1 打开文件的函数( fopen) 函

10、数fopen用来打开文件,函数fopen的使用格式如下: FILE *fp ; fp = fopen(文件名,文件使用方式),例如:fp=fopen(“d:exerciseuser.txt”, “r”); 表示要打开的文件名为user.txt,文件在d:exercise目录下,使用文件的方式为“只读”(r代表读)。fopen函数带回指向user.txt文件的指针并赋给fp,这样fp就指向user.txt文件。 由上面例子可以看出,在打开一个文件时,通知编译系统以下信息: 需要打开的文件标识,也就是文件的位置及文件名; 使用文件的方式(是“读”还是“写”等); 让哪一个指针指向被打开的文件。,第

11、15页,表12-1 文件的使用方式,第16页,表12-1 文件的使用方式,第17页,12.2 文件的打开与关闭,如果成功打开一个文件,则fopen()函数将返回一个指向该文件的指针,否则将返回空指针(NULL),由此可以判断一个文件是否成功打开。,第18页,12.2 文件的打开与关闭,12.2.2 关闭文件的函数fclose fclose函数用来关闭一个文件,其使用格式如下: fclose(文件类型指针); 例如: fclose(fp); 用fclose函数关闭一个由fopen函数打开的文件,当文件关闭成功时返回0,否则返回EOF。EOF是在stdio.h中定义的符号常量,值为-1。可以根据该

12、函数返回的值判断文件是否正常关闭。,第19页,12.2 文件的打开与关闭,例12.1 打开与关闭文件示例。 #include int main() FILE *fp; int i; fp=fopen(“cj.dat”, “rb”); if(fp=NULL) printf(“File open failed!n”); else printf(“File open successful!n”); i=fclose(fp); if (i=0) printf(“File close successful!n”); else printf(“File close failed!n”); return 0

13、; ,第20页,12.3 文件的定位和检测,12.3.1 文件的顺序读写和随机读写 对文件的读写方式有两种:顺序读写和随机读写,也称为顺序存取和随机存取。 顺序读写的特点是:从文件开始到文件结尾,一个字节一个字节地顺序读写,读写完第一个字节,才能顺序读写第二个字节,读写完第二个字节,才能顺序读写第三个字节,依次类推。 随机读写的特点是:允许从文件的任何位置开始读写,利用后面介绍的fseek和rewind函数,可以使文件内部的位置指针指向某一个位置,从该位置开始读写。 用程序来控制文件内部的位置指针的移动,称为文件的定位。对于存储在磁盘上的文件,既可以采用顺序读写方式,也可以采用随机读写方式。,

14、第21页,12.3 文件的定位和检测,12.3.2 rewind函数和fseek函数 1rewind函数 rewind函数的使用格式: rewind(文件类型指针); 例如: rewind(fp); rewind函数的功能是把文件内部的位置指针重新 定位到文件的开头,此函数无返回值。 注意:刚打开文件时,文件内部的位置指针是定位 在文件的开头,即文件首。,第22页,12.3 文件的定位和检测,12.3.2 rewind函数和fseek函数 2fseek函数 fseek函数的使用格式如下: fseek(文件类型指针,位移量,起始点); fseek函数的功能是移动文件内部的位置指针 到规定的位置。

15、,第23页,12.3 文件的定位和检测,fseek函数的第一个参数是“文件类型指针”,指明了要操作是哪一个文件。第二个参数是“位移量”,指明了从“起始点”开始移动的字节数,位移量必须是长整型数据,加后缀“L”;若位移量是正整数,表示文件内部的位置指针向文件尾方向移动,若位移量是负整数,表示文件内部的位置指针向文件首方向移动。第三个参数是“起始点”,指明了移动时的起始位置,起始点有三种取值,分别代表文件首、文件尾和当前位置,如表12-2所示。 表12-2 fseek函数的起始点,第24页,例如: fseek(fp,100L,SEEK_SET); 或fseek(fp,100L, 0); 将文件内部

16、的位置指针从文件首开始向文件尾方向移动100个字节。 fseek(fp,20L,SEEK_CUR); 或fseek(fp,20L,1); 将文件内部的位置指针从当前位置向文件尾方向移动20个字节。 fseek(fp,-30L,SEEK_CUR); 或fseek(fp,-30L,1); 将文件内部的位置指针从当前位置向文件首方向移动30个字节。 fseek(fp,-10L,SEEK_END); 或fseek(fp,-10L,2); 将文件内部的位置指针从文件尾开始向文件首方向移动10个字节。,第25页,12.3 文件的定位和检测,12.3.3 feof函数和ftell函数 1feof函数 feof函数的使用格式如下: feof(文件类型指针); feof函数是用来检测文件位置指针是否到达文件尾,若到达文件尾则返回一个非0值(真),否则返回0(假)。当我们对文件操作时,例如顺序读取文件的所有数据,可以使用这个函数来判断

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

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

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