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