《C语言程序设计与数据结构》课件第10章.ppt
《《C语言程序设计与数据结构》课件第10章.ppt》由会员分享,可在线阅读,更多相关《《C语言程序设计与数据结构》课件第10章.ppt(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第1010章章 文件读写文件读写C语言程序设计与数据结构教学提示:教学提示:存储在变量和数组(即内存)中的数据存储在变量和数组(即内存)中的数据是临时的,这些数据在程序运行结束后会消失,而是临时的,这些数据在程序运行结束后会消失,而文件可以用来永久地保存大量的数据。如果有些数文件可以用来永久地保存大量的数据。如果有些数据需要反复使用或永久保存,应该考虑使用文件来据需要反复使用或永久保存,应该考虑使用文件来完成。完成。教学要求:教学要求:本章要掌握本章要掌握文件在读写之前必须打开,文件在读写之前必须打开,读写结束必须关闭。文件可按只读、只写、读写、读写结束必须关闭。文件可按只读、只写、读写、追
2、加四种操作方式打开,同时还必须指定文件的类追加四种操作方式打开,同时还必须指定文件的类型是二进制文件还是文本文件。文件可按字节,字型是二进制文件还是文本文件。文件可按字节,字符串,数据块为单位读写,文件也可按指定的格式符串,数据块为单位读写,文件也可按指定的格式进行读写。文件内部的位置指针可指示当前的读写进行读写。文件内部的位置指针可指示当前的读写位置,移动该指针可以对文件实现随机读写。位置,移动该指针可以对文件实现随机读写。C语言程序设计与数据结构10.1文件概述与文件指针 所谓所谓“文件文件”是指一组相关数据的有序集合。是指一组相关数据的有序集合。我们在前几章中已多次接触使用过文件,例如我
3、们在前几章中已多次接触使用过文件,例如源程序文件、目标文件、可执行文件、库文件源程序文件、目标文件、可执行文件、库文件(头头文件文件)等。等。C语言程序设计与数据结构10.1.1 文件分类文文件件通通常常是是驻驻留留在在外外部部介介质质(如如磁磁盘盘等等)上上的的,在在使使用用时时才才调调入入内内存存中中来来。C语语言言把把文文件件看看作作是是由由一一个个个个字字符符(字字节节)的的数数据据顺顺序序组组成成的的。它它把把数数据据看看作作是是连连续续的的字字符符(字字节节)流流,这这样样它它对对文文件件的的存存取取实实际际上上是是以以字字符符(字字节节)为为单单位位的的。输输入入输输出出的的数数
4、据据流流的的开开始始和和结结束束只只受受程程序序的的控控制制而而不不受受特特定定符符号号(比比如如回回车车换换行行符符)的的控控制制。也也就就是是说说,C语语言言在在输输出出数数据据到到文文件件中中时时,并并不不会会自自动动增增加加回回车车换换行行符符以以示示结结束束,在在输输入入时时也也不不会会以以读读入入回回车车换换行行符符作作为为数据的间隔。数据的间隔。C语言程序设计与数据结构10.1.1 10.1.1 文件分类文件分类从从用用户户的的角角度度看看,文文件件可可分分为为普普通通文文件件和和设设备备文文件件两种。两种。根根据据文文件件的的存存储储形形式式,可可分分为为ASCII码码文文件件
5、和和二二进进制文件两种:制文件两种:(1)ASCII文文件件也也称称为为文文本本文文件件,这这种种文文件件在在磁磁盘盘中中存存放放时时每每个个字字符符对对应应一一个个字字节节,用用于于存存放放对对应应的的ASCII码码。例例如如一一个个整整型型数数据据1234在在文文本本文文件件中中占占4个个字字节节。我我们们用用Windows自自带带的的记记事事本本软软件件打打开开该类型文件能读懂文件中的内容。该类型文件能读懂文件中的内容。(2)(2)二进制文件是按二进制的编码方式来存放文件二进制文件是按二进制的编码方式来存放文件的。例如一个整型数据的。例如一个整型数据230在二进制文件中占在二进制文件中占
6、2个字个字节。节。C语言程序设计与数据结构10.1.2 文件类型指针 在在语语言言中中要要使使用用文文件件,必必须须用用一一个个指指针针变变量量指指向向一一个个文文件件,这这个个指指针针称称为为文文件件指指针针。通通过过文文件件指指针针就就可可对对它它所所指的文件进行各种操作。指的文件进行各种操作。定义文件指针的一般形式为:定义文件指针的一般形式为:FILE*指针变量标识符;指针变量标识符;其其中中FILE必必须须为为大大写写,它它是是在在头头文文件件stdio.h中中定定义义的的一一个个结结构构体体,该该结结构构体体中中含含有有文文件件名名、文文件件状状态态和和文文件件当当前前位置等信息,我
7、们编程时不必关心位置等信息,我们编程时不必关心FILE结构的细节。结构的细节。例例如如:FILE*fp;表表示示定定义义了了一一个个名名为为fp的的文文件件指指针针。如如果果变变量量fp已已被被正正确确赋赋值值,则则可可以以根根据据结结构构变变量量fp所所提提供供的的信信息息找找到到一一个个文文件件并并实实施施对对该该文文件件的的操操作作。习习惯惯上上把把fp称称为为指向一个文件的指针。指向一个文件的指针。C语言程序设计与数据结构10.2文件的打开与关闭 使使用用文文件件必必须须遵遵循循“先先打打开开,再再对对文文件件进进行行读读写操作,最后关闭文件写操作,最后关闭文件”的原则。的原则。在在语
8、语言言中中,对对文文件件的的这这些些操操作作都都可可以以由由库库函函数数来来完完成成,对对用用到到的的库库函函数数的的声声明明包包含含在在文文件件stdio.h中中,因因此此在在编编程程中中要要操操作作文文件件时时,要要使使用用头头文件包含命令文件包含命令#include“stdio.h”。C语言程序设计与数据结构10.2.1文件的打开 所所谓谓打打开开文文件件,实实际际上上是是获获得得文文件件的的各各种种有有关关信信息息,并并使使文文件件指指针针指指向向该该文文件件,以以便便进进行行下下一一步步操操作。作。C语言提供了函数语言提供了函数fopen来打开文件。来打开文件。其使用格式为:其使用格
9、式为:文件指针名文件指针名=fopen(文件名文件名,使用文件方式使用文件方式);其中,其中,“文件指针名文件指针名”必须是已被说明为必须是已被说明为FILE类类型的指针变量;型的指针变量;“文件名文件名”是将被打开的文件的文是将被打开的文件的文件名,通常是字符串常量或字符串数组(注意路径件名,通常是字符串常量或字符串数组(注意路径的分隔符应使用的分隔符应使用“”););“使用文件方式使用文件方式”是指是指文件的类型和操作要求,是一个由一对双引号括起文件的类型和操作要求,是一个由一对双引号括起来的字符串,共有来的字符串,共有12种种,具体的符号表示和含义见具体的符号表示和含义见表表10-1。C
10、语言程序设计与数据结构文件使用方式文件使用方式含义含义“rt”打开一个已经存在的文本文件,只能读取数据“wt”打开一个文本文件,只能写入数据。若文件不存在,则自动建立一个新文件接受写入的数据;若文件存在,则删除文件中原有内容,并接受写入的数据(覆盖)“a”打开一个已经存在的文本文件,只能写入数据并且追加在文件的尾部“r+”打开一个已经存在的文本文件,可以读取数据,也可以写入数据“w+”打开一个文本文件,可以读取数据,也可以写入数据。若文件不存在,则自动建立一个新文件接受写入的数据;若文件存在,则删除文件中原有内容,并接受写入的数据(覆盖)“a+”打开一个已经存在的文本文件,可以读取数据,也可以
11、写入数据(追加在文件的尾部)“rb”打开一个已经存在的二进制文件,只能读取数据“wb”打开一个二进制文件,只能写入数据。若文件不存在,则自动建立一个新文件接受写入的数据;若文件存在,则删除文件中原有内容并接受写入的数据(覆盖)“ab”打开一个已经存在的二进制文件,只能写入数据(追加在文件的尾部)“rb+”打开一个已经存在的二进制文件,可以读取数据,也可以写入数据“wb+”打开一个二进制文件,可以读取数据,也可以写入数据。若文件不存在,则自动建立一个新文件接受写入的数据;若文件存在,则删除文件中原有内容,并接受写入的数据(覆盖)“ab+”打开一个已经存在的二进制文件,可以读取数据,也可以写入数据
12、(追加在文件的尾部)C语言程序设计与数据结构fopen打开文件 例如:例如:FILE*fpTa;fpTa=fopen(c:cprogramabc,rb);/*反斜线反斜线“”中的第一个表示转义字符中的第一个表示转义字符*/其其意意义义是是打打开开C驱驱动动器器磁磁盘盘的的cprogram子子目目录录下下的的文文件件abc,这这是是一一个个二二进进制制文文件件,只只允允许许按按二二进进制制方式进行读操作。方式进行读操作。又如:又如:FILE*fp;fp=fopen(mytest1.txt,r);其意义是在当前目录下打开文件其意义是在当前目录下打开文件mytest1.txt,只允只允许进行许进行“
13、读读”操作,并使操作,并使fp指向该文件。指向该文件。C语言程序设计与数据结构10.2.2文件关闭函数 在在使使用用完完一一个个文文件件以以后后,应应该该将将该该文文件件关关闭闭,以以防防止止它它再再被被调调用用或或丢丢失失数数据据。“关关闭闭”就就是是使使文文件件指指针针变变量量不不再再指指向向该该文文件件,也也就就是是文文件件指指针针变变量量与与该该文文件件“断断开开”,此此后后不不能能通通过过该该指指针针对对原原来来与与其其相相联联系系的的文文件件进进行行读读、写写操操作作(除除非非再再次次打打开开该该文文件件,使文件指针变量重新指向该文件)。使文件指针变量重新指向该文件)。fclose
14、()函函数数用用来来关关闭闭一一个个已已经经由由fopen()函函数数打打开开的的文文件件,正正常常完完成成关关闭闭文文件件操操作作时时,fclose函函数数返返回值为回值为0,有错误发生则返回非零值。,有错误发生则返回非零值。其调用的一般形式为:其调用的一般形式为:fclose(文件指针文件指针);例如:例如:fclose(fp);C语言程序设计与数据结构10.3 文件位置指针的有关函数 在在文文件件内内部部有有一一个个位位置置指指针针,用用来来指指向向文文件件的的当当前前读读写写字字节节。在在文文件件打打开开时时,该该位位置置指指针针总总是是指指向向文文件件的的第第一一个个字字节节。使使用
15、用下下面面章章节节介介绍绍的的fgetc等等函函数对文件进行读写后,该位置指针将自动向后移动。数对文件进行读写后,该位置指针将自动向后移动。但文件指针和文件内部的位置指针不是一回事。但文件指针和文件内部的位置指针不是一回事。文件指针是指向整个文件的,须在程序中定义说明,文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当前读写位置,部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均自动向后移动,它不需在程每读写一次,该指针均自动向后移动,它不需在程序中定义说明,而是由
16、系统自动设置的。序中定义说明,而是由系统自动设置的。C语言程序设计与数据结构顺序读写和随机读写文件的读写方式分为顺序读写和随机读写。文件的读写方式分为顺序读写和随机读写。(1)(1)顺顺序序读读写写即即读读写写文文件件只只能能从从头头开开始始,顺顺序序读读写写各各个个数数据据。但但在在实实际际问问题题中中常常要要求求只只读读写写文文件件中中某某一一指指定定的的部部分分,为为了了解解决决这这个个问问题题可可移移动动文文件件内内部部的的位位置置指指针针到到需需要要读读写写的的位置,再进行读写,这种读写称为随机读写。位置,再进行读写,这种读写称为随机读写。(2)(2)随机读写可以通过利用系统函数去主
17、动移动文件内部随机读写可以通过利用系统函数去主动移动文件内部的位置指针来实现。这样的函数主要有两个,即的位置指针来实现。这样的函数主要有两个,即rewind函函数和数和fseek函数。实现随机读写的关键是要按要求移动位置函数。实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。指针,这称为文件的定位。在移动位置指针之后,即可用在移动位置指针之后,即可用后面介绍的任一种读写函数进行读写。由于一般是读写一后面介绍的任一种读写函数进行读写。由于一般是读写一个数据据块,因此常用个数据据块,因此常用fread和和fwrite函数。函数。C语言程序设计与数据结构rewind函数rewind函函数数
18、的的功功能能是是把把文文件件内内部部的的位位置置指指针针移移到到文文件首。其调用形式为:件首。其调用形式为:rewind(文件指针文件指针);“文件指针文件指针”指向被移动的文件。指向被移动的文件。C语言程序设计与数据结构fseek函数fseek函函数数用用来来移移动动文文件件内内部部位位置置指指针针,其其调调用用形形式式为:为:fseek(文件指针文件指针,位移量位移量,起始点起始点);其中:其中:“文件指针文件指针”指向被移动的文件。指向被移动的文件。“位位移移量量”表表示示移移动动的的字字节节数数,要要求求位位移移量量是是long型型数数据据,以以便便在在文文件件长长度度大大于于64KB
19、时时不不会会出出错。当用常量表示位移量时,要求加后缀错。当用常量表示位移量时,要求加后缀“L”。“起始点起始点”表示从何处开始计算位移量,规定的表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。起始点有三种:文件首,当前位置和文件尾。C语言程序设计与数据结构起始点起始点表示符号表示符号数字表示数字表示文件首文件首SEEK_SET0当前位置当前位置SEEK_CUR1文件末尾文件末尾SEEK_END2C语言程序设计与数据结构例如:例如:fseek(fp,100L,0);/*将将文文件件位位置置指指针针移移到到离离文文件头件头100个字节处个字节处*/fseek(fp,20L,
20、1);/*将将文文件件位位置置指指针针从从当当前前位位置置后移后移20个字节的位置个字节的位置*/fseek(fp,-10L,SEEK_END);/*将将文文件件位位置置指指针针从从文文件末尾前移件末尾前移10个字节的位置个字节的位置*/注意:注意:fseek函数一般用于二进制文件。在文本文函数一般用于二进制文件。在文本文件中由于要进行转换,往往计算的位置会出现错误。件中由于要进行转换,往往计算的位置会出现错误。C语言程序设计与数据结构ftell函函数数:用用来来得得到到流流式式文文件件中中的的当当前前位位置置,用用相相对对于于文文件件开开头头的的位位移移量量来来表表示示。如如返返回回-1L则
21、则表表示出错。示出错。例如:例如:longa;a=ftell(fp);文件结束检测函数文件结束检测函数feof函函数数feof()判判断断文文件件是是否否处处于于文文件件结结束束位位置置,如如文文件结束,则返回值为件结束,则返回值为1,否则为,否则为0。其调用格式为:其调用格式为:feof(文件指针文件指针);说明:说明:文件结束标志文件结束标志EOF(每个文件末有一结束标每个文件末有一结束标志志EOF,值为值为-1)只适用于判断文本文件是否结束。只适用于判断文本文件是否结束。而函数而函数feof()则对文本文件和二进制文件都适用。则对文本文件和二进制文件都适用。C语言程序设计与数据结构10.
22、4读写文件 10.4.1字符读写函数字符读写函数fgetc和和fputc 是以字符是以字符(字节字节)为单位的读写函数。每次可从文件读出或为单位的读写函数。每次可从文件读出或向文件写入一个字符。字符输入向文件写入一个字符。字符输入/出函数所处理的文件可以出函数所处理的文件可以是文本文件,也可以是二进制文件。是文本文件,也可以是二进制文件。10.4.2字符串读写函数字符串读写函数fgets和和fputs 处理的文件一般是文本文件,读写的数据以字符串为单位。处理的文件一般是文本文件,读写的数据以字符串为单位。10.4.3数据块读写函数数据块读写函数fread和和fwtrite 用用于于整整块块数数
23、据据的的读读写写函函数数。可可用用来来读读写写一一组组数数据据,如如一一个数组、一个结构变量的值等。个数组、一个结构变量的值等。10.4.4格式化读写函数格式化读写函数fscanf和和fprintf 与前面使用的与前面使用的scanf和和printf函数的功能相似,都是格式函数的功能相似,都是格式化读写函数。两者的区别在于化读写函数。两者的区别在于fscanf函数和函数和fprintf函数的读函数的读写对象不是键盘和显示器,而是磁盘文件。写对象不是键盘和显示器,而是磁盘文件。C语言程序设计与数据结构读字符函数fgetcfgetc函函数数的的功功能能是是从从指指定定的的文文件件中中读读取取一一个
24、个字字符符,函函数数调调用用的一般形式为:的一般形式为:字符变量字符变量=fgetc(文件指针文件指针);例例如如:ch=fgetc(fp);其其意意义义是是从从打打开开的的文文件件fp中中读读取取一一个个字字符符并送入字符变量并送入字符变量ch中。中。对于对于fgetc函数的使用有以下几点说明:函数的使用有以下几点说明:(1)在在fgetc函函数数调调用用中中,读读取取的的文文件件必必须须是是以以读读或或读读写写方方式式打打开的。开的。(2)读读取取字字符符的的结结果果也也可可以以不不向向字字符符变变量量赋赋值值,例例如如fgetc(fp);但是读出的字符不能保存。但是读出的字符不能保存。(
25、3)文件内部的位置指针在文件打开时总是指向文件的第一文件内部的位置指针在文件打开时总是指向文件的第一个字节。使用个字节。使用fgetc函数后,该位置指针将向后移动一个字函数后,该位置指针将向后移动一个字节。因此可连续多次使用节。因此可连续多次使用fgetc函数来读取多个字符。函数来读取多个字符。C语言程序设计与数据结构【例【例10.1】将】将C盘根目录下的文本文件盘根目录下的文本文件test1.txt的内容在屏幕上输出。的内容在屏幕上输出。#includemain()FILE*fp;/*定义了文件指针定义了文件指针fp*/charch;if(fp=fopen(c:test1.txt,r)=NU
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计与数据结构 语言程序设计 数据结构 课件 10
限制150内