kj-第12章文件课件.ppt
《kj-第12章文件课件.ppt》由会员分享,可在线阅读,更多相关《kj-第12章文件课件.ppt(57页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第1页第第12章章 文件文件 本章概述 本章的学习目标主要内容第2页本章概述本章概述l文件操作是文件操作是C语言程序设计中的重要组成部语言程序设计中的重要组成部分。很多应用问题中会用到文件操作。分。很多应用问题中会用到文件操作。l本章讨论本章讨论C语言程序设计中的文件操作。包语言程序设计中的文件操作。包括文件的打开与关闭、文件的定位与检测、括文件的打开与关闭、文件的定位与检测、文件的读写所使用的各种函数和编程方法。文件的读写所使用的各种函数和编程方法。第3页本章的学习目标本章的学习目标l本章教学目的:理解文件的概念,掌握用本章教学目的:理解文件的概念,掌握用来进行文件的打开、关闭、定位、检测、
2、来进行文件的打开、关闭、定位、检测、读写操作的方法。读写操作的方法。l本章教学重点:文件的读写本章教学重点:文件的读写l本章教学难点:文件的定位与检测本章教学难点:文件的定位与检测第4页主要内容主要内容12.1 文件概述文件概述 12.2 文件的打开与关闭文件的打开与关闭 12.3 文件的定位和检测文件的定位和检测 12.4 文件的读写文件的读写 12.5 程序设计举例程序设计举例 第5页12.1 文件概述文件概述 12.1.1 文件文件l文件是程序设计中的一个重要概念,所谓文件是程序设计中的一个重要概念,所谓“文件文件”是指存储在外部介质是指存储在外部介质(如磁盘)上的一组相关数据的集合,(
3、如磁盘)上的一组相关数据的集合,为了便于定位这组数据,通常要为为了便于定位这组数据,通常要为它取一个名称,即文件名。操作系统就是以文件为单位对数据进行管理的,它取一个名称,即文件名。操作系统就是以文件为单位对数据进行管理的,如果想找存储在外部介质上的数据,必须按文件名找到存放该数据的文件,如果想找存储在外部介质上的数据,必须按文件名找到存放该数据的文件,然后再从文件中读取数据。然后再从文件中读取数据。l从用户的角度来看,文件可以分普通文件和设备文件。从用户的角度来看,文件可以分普通文件和设备文件。l普通文件普通文件是驻留在外部介质上的有序数据集,它可以是源文件、目标文件、是驻留在外部介质上的有
4、序数据集,它可以是源文件、目标文件、可执行程序,也可是一组待输入的原始数据,或者是一组输出结果。前者可执行程序,也可是一组待输入的原始数据,或者是一组输出结果。前者通常称为程序文件,后者则可称为数据文件。通常称为程序文件,后者则可称为数据文件。l设备文件设备文件是指与主机相联的各种外部设备,如显示器、键盘等,对于操作是指与主机相联的各种外部设备,如显示器、键盘等,对于操作系统而言,每一个与主机相联的输入系统而言,每一个与主机相联的输入/输出设备都是一个文件,其输入输输出设备都是一个文件,其输入输出等同于文件的读和写。出等同于文件的读和写。l例如,通常例如,通常将显示器定义为标准输出文件,将键盘
5、定义为标准输入文件。将显示器定义为标准输出文件,将键盘定义为标准输入文件。我们前面使用的我们前面使用的printf()、putchar()等等C函数就是输出到标准输出文件函数就是输出到标准输出文件(即显示器),(即显示器),scanf()、getchar()等等C函数就是从标准输入文件(即键函数就是从标准输入文件(即键盘)输入数据。盘)输入数据。 第6页12.1 文件概述文件概述 12.1.2 数据文件的存储形式数据文件的存储形式l从文件的编码方式来看,文件可以分为从文件的编码方式来看,文件可以分为ASCII码文件和码文件和二进制文件两种。二进制文件两种。lASCII码文件也称为文本文件,这种
6、文件在磁盘中存储码文件也称为文本文件,这种文件在磁盘中存储时每个字符对应一个字节,存放的是该字符的时每个字符对应一个字节,存放的是该字符的ASCII码码值。值。l二进制文件是把内存中的数据按其在内存中的存储形式二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。原样输出到磁盘上存放。lASCII码文件内容可以在屏幕上按字符显示,例如码文件内容可以在屏幕上按字符显示,例如C源程源程序文件就是序文件就是ASCII文件,在文件,在windows中可以直接用记事中可以直接用记事本打开阅读。由于本打开阅读。由于ASCII码文件是按字符显示,因此能码文件是按字符显示,因此能读懂其内容,而
7、二进制文件虽然有时也能显示在屏幕上,读懂其内容,而二进制文件虽然有时也能显示在屏幕上,但其内容却无法直接读懂。但其内容却无法直接读懂。第7页l图图12.1中,中,00110001、00110010、00110011、00110100分别是字符分别是字符1、2、3、4的的ASCII码值的二进制形式。码值的二进制形式。l例如,数字例如,数字1234的几种存储形式如图的几种存储形式如图12.1所示:所示: 第8页l存储内容用存储内容用ASCII码形式输出时,其字节与字符一一对应,一码形式输出时,其字节与字符一一对应,一个字节代表一个字符,便于对字符进行逐个处理,也便于输出个字节代表一个字符,便于对字
8、符进行逐个处理,也便于输出字符,但一般占用的存储空间较多,而且要花费转换时间。字符,但一般占用的存储空间较多,而且要花费转换时间。l用二进制形式输出,可以节省外存空间和转换时间,但一个字用二进制形式输出,可以节省外存空间和转换时间,但一个字节与字符无一一对应关系,不能直接输出字符形式。一般中间节与字符无一一对应关系,不能直接输出字符形式。一般中间结果数据需要暂时保存在外存上,常用二进制文件保存。结果数据需要暂时保存在外存上,常用二进制文件保存。l因为因为C文件是一串字节流或二进制流,所以文件是一串字节流或二进制流,所以C系统在处理这些文系统在处理这些文件时,并不区分类型,都看成是字符流,按字节
9、进行处理。输件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制,即在输出时不会自动增加回车换行符以作为回车符)的控制,即在输出时不会自动增加回车换行符以作为记录结束的标志,输入时不以回车换行符作为记录的间隔。我记录结束的标志,输入时不以回车换行符作为记录的间隔。我们把这种文件称作们把这种文件称作“流式文件流式文件”。C语言允许对文件存取一个语言允许对文件存取一个字符,有很强的灵活性。字符,有很强的灵活性。第9页12.1.3 标准文件与非标准文件标准文件与非标准文件l在老
10、版本的在老版本的C(如(如Unix下的下的C)中对文件的处理)中对文件的处理方式有两种:方式有两种:l一种是缓冲文件系统一种是缓冲文件系统又称标准文件系统,又称标准文件系统,l另一种是非缓冲文件系统另一种是非缓冲文件系统又称非标准文件又称非标准文件系统。系统。第10页l所谓所谓“缓冲文件系统缓冲文件系统”是指系统自动地在内存区为每是指系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区,从内存向磁盘一个正在使用的文件开辟一个缓冲区,从内存向磁盘输出数据时必须先送到内存中的缓冲区,缓冲区装满输出数据时必须先送到内存中的缓冲区,缓冲区装满数据后,再一起送到磁盘中去。同样,从磁盘向内存数据后,再一
11、起送到磁盘中去。同样,从磁盘向内存中读入数据时,则一次从磁盘文件中将一批数据读入中读入数据时,则一次从磁盘文件中将一批数据读入到缓冲区,然后再从缓冲区逐个地将数据送到程序数到缓冲区,然后再从缓冲区逐个地将数据送到程序数据区(给程序中的变量),如图据区(给程序中的变量),如图12.2所示。缓冲区的所示。缓冲区的大小随大小随C的版本不同而不同,一般为的版本不同而不同,一般为512字节。字节。第11页l所谓所谓“非缓冲文件系统非缓冲文件系统”是指系统不会自动是指系统不会自动开辟确定大小的缓冲区,而由程序为每个文开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。件设定缓冲区。lC语言中没有专门的输入
12、输出语句,对文件语言中没有专门的输入输出语句,对文件的读写都是用库函数来实现的,的读写都是用库函数来实现的,ANSI规定规定了输入输出函数,用它们对文件进行读写。了输入输出函数,用它们对文件进行读写。l本章只介绍本章只介绍ANSI C规定的缓冲文件系统,即规定的缓冲文件系统,即标准文件系统。标准文件系统。 第12页12.1.4 文件类型指针文件类型指针l 在缓冲文件系统中有一个关键概念是在缓冲文件系统中有一个关键概念是“文件类型指针文件类型指针”,每一个,每一个存在的文件都在内存中开辟一个区域,用来存放文件的有关信息(如存在的文件都在内存中开辟一个区域,用来存放文件的有关信息(如文件的名称、文
13、件状态、文件当前位置等),这些信息保存在一个结文件的名称、文件状态、文件当前位置等),这些信息保存在一个结构体变量中,该结构体由系统声明,取名为构体变量中,该结构体由系统声明,取名为FILE。l Turbo C在在stdio.h文件中有以下的类型声明:文件中有以下的类型声明:ltypedef structl short level; /*缓冲区缓冲区“满满”或或“空空”的程度的程度*/l unsigned flags; /*文件状态标志文件状态标志*/l char fd; /*文件描述符文件描述符*/l unsigned char hold; /*如无缓冲区不读取字符如无缓冲区不读取字符*/l
14、 short bsize; /*缓冲区的大小缓冲区的大小*/l unsigned char *buffer; /*数据缓冲区的位置数据缓冲区的位置*/l unsigned char *curp; /*指针,当前的指向指针,当前的指向*/l unsigned istemp; /*临时文件临时文件,指示器指示器*/l short token; /*用于有效性检查用于有效性检查*/lFILE; 第13页12.1.4 文件类型指针文件类型指针l 定义文件类型指针变量的格式为:定义文件类型指针变量的格式为:l FILE *指针变量标识符;指针变量标识符;l例如:例如: FILE *fp;l 上面的定义表
15、示上面的定义表示fp是指向文件类型的指针变量。是指向文件类型的指针变量。l 文件被打开时,系统自动为该文件定义一个文件被打开时,系统自动为该文件定义一个FILE类型变类型变量,使该文件与对应的量,使该文件与对应的FILE类型变量建立联系。因为类型变量建立联系。因为fp是是指向指向FILE类型的指针变量,通过类型的指针变量,通过fp即可找到存放该文件信即可找到存放该文件信息的息的FILE类型变量,然后按变量提供的信息找到该文件,类型变量,然后按变量提供的信息找到该文件,对该文件实施操作。对该文件实施操作。l 习惯上笼统地把习惯上笼统地把fp称为文件类型指针。所谓打开文件就称为文件类型指针。所谓打
16、开文件就是指建立文件的各种有关信息,并使是指建立文件的各种有关信息,并使FILE类型指针指向该类型指针指向该文件,以便对文件进行操作。关闭文件则断开文件,以便对文件进行操作。关闭文件则断开FILE类型指类型指针与该文件间的联系,也就禁止对该文件进行操作。针与该文件间的联系,也就禁止对该文件进行操作。第14页12.2 文件的打开与关闭文件的打开与关闭 12.2.1 打开文件的函数(打开文件的函数( fopen) 函数函数fopen用来打开文件,函数用来打开文件,函数fopen的使用格式如下:的使用格式如下: FILE *fp ; fp = fopen(文件名,文件使用方式文件名,文件使用方式)
17、例如:例如:fp=fopen(“d:exerciseuser.txt”, “r”); 表示要打开的文件名为表示要打开的文件名为user.txt,文件在,文件在d:exercise目录下,使用文件的方目录下,使用文件的方式为式为“只读只读”(r代表读)。代表读)。fopen函数带回指向函数带回指向user.txt文件的指针并赋给文件的指针并赋给fp,这样这样fp就指向就指向user.txt文件。文件。 由上面例子可以看出,在打开一个文件时,通知编译系统以下信息:由上面例子可以看出,在打开一个文件时,通知编译系统以下信息: 需要打开的文件标识,也就是文件的位置及文件名;需要打开的文件标识,也就是文
18、件的位置及文件名; 使用文件的方式(是使用文件的方式(是“读读”还是还是“写写”等);等); 让哪一个指针指向被打开的文件。让哪一个指针指向被打开的文件。第15页表表12-1 12-1 文件的使用方式文件的使用方式字符含 义r r以只读方式打开一个文本文件。文件必须存在,否则打开失败。以只读方式打开一个文本文件。文件必须存在,否则打开失败。打开后,文件内部的位置指针指向文件首部的第一个字符。打开后,文件内部的位置指针指向文件首部的第一个字符。w w以只写方式打开一个文本文件。若文件不存在,则建立该文件。以只写方式打开一个文本文件。若文件不存在,则建立该文件。若文件已存在,则删除原文件内容,写入
19、新内容。若文件已存在,则删除原文件内容,写入新内容。a a以追加方式打开一个文本文件。只能向文件尾追加数据。文件必以追加方式打开一个文本文件。只能向文件尾追加数据。文件必须存在,否则打开失败。打开后,文件内部的位置指针指向文件须存在,否则打开失败。打开后,文件内部的位置指针指向文件尾。尾。rbrb以只读方式打开一个二进制文件。文件必须存在,否则打开失败。以只读方式打开一个二进制文件。文件必须存在,否则打开失败。打开后,文件内部的位置指针指向文件首部的第一个字节。打开后,文件内部的位置指针指向文件首部的第一个字节。wbwb以只写方式打开一个二进制文件。若文件不存在,则建立该文件。以只写方式打开一
20、个二进制文件。若文件不存在,则建立该文件。若文件已存在,则删除原文件内容,写入新内容。若文件已存在,则删除原文件内容,写入新内容。abab以追加方式打开一个二进制文件。只能向文件尾追加数据。文件以追加方式打开一个二进制文件。只能向文件尾追加数据。文件必须存在,否则打开失败。打开后,文件内部的位置指针指向文必须存在,否则打开失败。打开后,文件内部的位置指针指向文件尾。件尾。第16页表表12-1 12-1 文件的使用方式文件的使用方式字符含 义r+r+以读以读/ /写方式打开一个文本文件。文件必须存在。打开后,文件内部的位置指针指写方式打开一个文本文件。文件必须存在。打开后,文件内部的位置指针指向
21、文件首部的第一个字符。打开后,可以读取文本内容,也可以写入文本内容,向文件首部的第一个字符。打开后,可以读取文本内容,也可以写入文本内容,也可以既读又写。也可以既读又写。w+w+以读以读/ /写方式打开或新建立一个文本文件。若文件已存在,则新的写操作将覆盖原写方式打开或新建立一个文本文件。若文件已存在,则新的写操作将覆盖原来的数据。若文件不存在,则建立一个新文件。还可以在不关闭文件的情况下,来的数据。若文件不存在,则建立一个新文件。还可以在不关闭文件的情况下,再读取文件内容。再读取文件内容。a+a+以读和追加的方式打开一个文本文件。允许读或追加。文件必须存在,否则打开以读和追加的方式打开一个文
22、本文件。允许读或追加。文件必须存在,否则打开失败。打开后,文件内部的位置指针指向文件尾。可在文件尾追加数据,也可将失败。打开后,文件内部的位置指针指向文件尾。可在文件尾追加数据,也可将位置指针移到某个位置,读取文件内容。位置指针移到某个位置,读取文件内容。rb+rb+以读以读/ /写方式打开二进制文件。文件必须存在。打开后,文件内部的位置指针指向写方式打开二进制文件。文件必须存在。打开后,文件内部的位置指针指向文件首部的第一个字节。打开后,可以读取数据,也可以写入数据,也可以既读文件首部的第一个字节。打开后,可以读取数据,也可以写入数据,也可以既读又写又写。wb+wb+以读以读/ /写方式打开
23、或新建立一个二进制文件。若文件已存在,则新的写操作将覆盖写方式打开或新建立一个二进制文件。若文件已存在,则新的写操作将覆盖原来的数据。若文件不存在,则建立一个新文件。还可以在不关闭文件的情况下,原来的数据。若文件不存在,则建立一个新文件。还可以在不关闭文件的情况下,再读取文件内容。再读取文件内容。ab+ab+以读和追加的方式打开一个二进制文件。允许读或追加。文件必须存在,否则打以读和追加的方式打开一个二进制文件。允许读或追加。文件必须存在,否则打开失败。打开后,文件内部的位置指针指向文件尾。可在文件尾追加数据,也可开失败。打开后,文件内部的位置指针指向文件尾。可在文件尾追加数据,也可将位置指针
24、移到某个位置,读取数据。将位置指针移到某个位置,读取数据。第17页12.2 文件的打开与关闭文件的打开与关闭 如果成功打开一个文件,则如果成功打开一个文件,则fopen()函数将返回一个指向该文件的指针,否则函数将返回一个指向该文件的指针,否则将返回空指针(将返回空指针(NULL),由此可以判断),由此可以判断一个文件是否成功打开。一个文件是否成功打开。第18页12.2 文件的打开与关闭文件的打开与关闭 12.2.2 关闭文件的函数关闭文件的函数fclose fclose函数用来关闭一个文件,其使用格式如下:函数用来关闭一个文件,其使用格式如下: fclose(文件类型指针文件类型指针); 例
25、如:例如: fclose(fp); 用用fclose函数关闭一个由函数关闭一个由fopen函数打开的文件,当文函数打开的文件,当文件关闭成功时返回件关闭成功时返回0,否则返回,否则返回EOF。EOF是在是在stdio.h中中定义的符号常量,值为定义的符号常量,值为-1。可以根据该函数返回的值判断。可以根据该函数返回的值判断文件是否正常关闭。文件是否正常关闭。第19页12.2 文件的打开与关闭文件的打开与关闭 例例12.1 打开与关闭文件示例。打开与关闭文件示例。#include int main()FILE *fp; int i; fp=fopen(“cj.dat”, “rb”); if(fp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- kj 12 文件 课件
限制150内