《(中职)编程语言基础——C语言模块8教学课件.ppt》由会员分享,可在线阅读,更多相关《(中职)编程语言基础——C语言模块8教学课件.ppt(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、YCF正版可修改PPT(中职)编程语言基础C语言模块8教学课件模块模块8文件文件任务任务1 文件的定义和分类文件的定义和分类任务任务2 文件的打开与关闭文件的打开与关闭任务任务3 文件的读写文件的读写任务任务1文件的定义和分类文件的定义和分类8.1.1 文件的定义文件的定义通常,文件通常,文件(File)是指保存在某种外部存储介质上的一组意是指保存在某种外部存储介质上的一组意义相关的数据集合。每个文件都必须用一个文件名来进行标义相关的数据集合。每个文件都必须用一个文件名来进行标识。操作系统就是根据文件的名称来对文件进行存取操作的。识。操作系统就是根据文件的名称来对文件进行存取操作的。用户也可以
2、建立自己的文件,用不同的名字和后缀用户也可以建立自己的文件,用不同的名字和后缀(扩展名扩展名)来表示文件的意义和类型。由文件的定义还可以看出,文件来表示文件的意义和类型。由文件的定义还可以看出,文件操作一般会涉及外部存储介质的存储操作,通常的访问对象操作一般会涉及外部存储介质的存储操作,通常的访问对象是磁盘。是磁盘。上面所讲的文件实际上是指磁盘文件,但在操作系统中,许上面所讲的文件实际上是指磁盘文件,但在操作系统中,许多外部设备也可以被看做是文件,这样的文件称为设备文件。多外部设备也可以被看做是文件,这样的文件称为设备文件。每个设备都有唯一的一个设备文件名。在每个设备都有唯一的一个设备文件名。
3、在C语言系统中,也采语言系统中,也采用类似的方法。用类似的方法。C系统定义了系统定义了5个标准设备文件,如个标准设备文件,如表表8-1所所示。示。下一页返回任务任务1文件的定义和分类文件的定义和分类8.1.2 文件的分类文件的分类文件有很多种,常见的有文本文件、图形文件、声音文件、可执文件有很多种,常见的有文本文件、图形文件、声音文件、可执行文件等,它们可以有很多分类方法。而行文件等,它们可以有很多分类方法。而c语言关心的是文件中语言关心的是文件中数据的存储方式,就此而言,文件分为以下两类。数据的存储方式,就此而言,文件分为以下两类。1.文本文件文本文件文本文件是指由字符组成的文件。字符可以是
4、字母、数字、运算文本文件是指由字符组成的文件。字符可以是字母、数字、运算符等,每个字符通过相应的编码存储在文件中。目前常用的编码符等,每个字符通过相应的编码存储在文件中。目前常用的编码是是ASCII码,它用一个字节来对这些字符进行编码。码,它用一个字节来对这些字符进行编码。2.二进制文件二进制文件二进制文件是指数据按存储原样组成的文件。仍以存储数二进制文件是指数据按存储原样组成的文件。仍以存储数16为为例,在二进制文件中直接存放的就是例,在二进制文件中直接存放的就是16,因此只要占用一个字,因此只要占用一个字节就行了。节就行了。上一页返回任务任务2文件的打开与关闭文件的打开与关闭 8.2.1
5、文件的打开文件的打开(fopen()函数函数)函数用来打开文件,正常操作时,它将为函数用来打开文件,正常操作时,它将为 用户指定的文件在内存中分配一个用户指定的文件在内存中分配一个FILE结构区,并将该结构结构区,并将该结构区的指针作为函数值返回,以后用户可以通过指针来对文件区的指针作为函数值返回,以后用户可以通过指针来对文件进行存取操作。进行存取操作。1.一般形式一般形式上一页返回下一页任务任务2文件的打开与关闭文件的打开与关闭 2.说明说明文件指针变量要在使用前进行定义文件指针变量要在使用前进行定义;文件名是字符串或字符串文件名是字符串或字符串变量。若是字符串变量,应在使用前赋值变量。若是
6、字符串变量,应在使用前赋值;方式表示欲对所打方式表示欲对所打开的文件进行的访问方式。开的文件进行的访问方式。Turbo C所使用的标记符和含义所使用的标记符和含义如如表表8-2所示。所示。(1)当用当用”w”方式打开一个文件时,若已存在与该文件名相方式打开一个文件时,若已存在与该文件名相同的文件则会被抹掉,重建一个新文件。若不存在该文件,同的文件则会被抹掉,重建一个新文件。若不存在该文件,则新建一个用该文件名命名的文件。则新建一个用该文件名命名的文件。(2)当用当用”r”方式或方式或”a”方式打开一个文件时,该文件必须存方式打开一个文件时,该文件必须存在,不然会返回一个出错信息。在,不然会返回
7、一个出错信息。上一页返回下一页任务任务2文件的打开与关闭文件的打开与关闭(3)给文件名变量赋值或书写文件名字符串时,应注意文件给文件名变量赋值或书写文件名字符串时,应注意文件名包括盘符和路径。路径的分隔符要加上转义字符名包括盘符和路径。路径的分隔符要加上转义字符“”,因,因此在格式中出现的是此在格式中出现的是“c:data.”。如果被打开的文件在。如果被打开的文件在当前盘当前目录下,则盘符和路径可以省略。当前盘当前目录下,则盘符和路径可以省略。(4)如果需要向文件尾部添加新的数据如果需要向文件尾部添加新的数据(不删除原有数据不删除原有数据),则应该用则应该用“a”方式打开。但此时该文件必须已经
8、存在,否则方式打开。但此时该文件必须已经存在,否则将得到出错信息。用该方式打开文件时,其内部的位置指针将得到出错信息。用该方式打开文件时,其内部的位置指针指向文件尾。指向文件尾。(5)用用“r+”、“w+”、a+”方式打开的文件可以用来输入方式打开的文件可以用来输入和输出数据。和输出数据。上一页返回下一页任务任务2文件的打开与关闭文件的打开与关闭(6)如果不能实现如果不能实现“打开打开”的任务,的任务,fopen函数将返回一个函数将返回一个NULL空指针。经常利用这一点来判断文件的打开操作是否空指针。经常利用这一点来判断文件的打开操作是否正常,若不正常,则应给出相应的出错信息。正常,若不正常,
9、则应给出相应的出错信息。(7)在应用文本文件向计算机输入时,将回车换行符转换为在应用文本文件向计算机输入时,将回车换行符转换为一个换行符,在输出时把换行符转换成为回车和换行两个字一个换行符,在输出时把换行符转换成为回车和换行两个字符。在用二进制文件时,不进行这种转换,在内存中的数据符。在用二进制文件时,不进行这种转换,在内存中的数据形式与输出到外部文件中的数据形式完全一致。形式与输出到外部文件中的数据形式完全一致。(8)在程序开始运行时,系统自动打开在程序开始运行时,系统自动打开3个标准文件个标准文件:标准输标准输入、标准输出、标准出错输出。通常这入、标准输出、标准出错输出。通常这3个文件都与
10、终端相联个文件都与终端相联系。系。上一页返回下一页任务任务2文件的打开与关闭文件的打开与关闭8.2.2 文件的关闭文件的关闭(fclose()函数函数)文件操作完以后,为了确保数据保存的完整性,一定要关闭文件操作完以后,为了确保数据保存的完整性,一定要关闭文件。文件关闭后,该文件对应的文件。文件关闭后,该文件对应的FILE结构区便被释放,从结构区便被释放,从而使被关闭的文件得到保护。此后,文件指针变量与文件脱而使被关闭的文件得到保护。此后,文件指针变量与文件脱离指向关系,以后不能再通过该指针对其相连的文件进行读离指向关系,以后不能再通过该指针对其相连的文件进行读写操作。写操作。1.一般形式一般
11、形式上一页返回下一页任务任务2文件的打开与关闭文件的打开与关闭2.说明说明文件指针变量是在文件打开之前定义的,打开时,将它指向文件指针变量是在文件打开之前定义的,打开时,将它指向打开的文件,以便对文件进行读写操作。关闭文件,就是使打开的文件,以便对文件进行读写操作。关闭文件,就是使文件指针变量不再指向该文件,同时将尚未写入磁盘的数据文件指针变量不再指向该文件,同时将尚未写入磁盘的数据(存在内存缓冲区中的数据存在内存缓冲区中的数据)写入磁盘,从而保证写入文件的写入磁盘,从而保证写入文件的数据的完整性。作为良好的习惯,应该在文件操作完毕及时数据的完整性。作为良好的习惯,应该在文件操作完毕及时进行关
12、闭。进行关闭。C语言的流式文件,在打开时建立一个内存文件缓语言的流式文件,在打开时建立一个内存文件缓冲区,读写数据是通过批处理方式对磁盘进行工作的。当写冲区,读写数据是通过批处理方式对磁盘进行工作的。当写数据时写满缓冲区才向磁盘写一次,因此,若在缓冲区不满数据时写满缓冲区才向磁盘写一次,因此,若在缓冲区不满时结束操作,文件中的数据可能不全时结束操作,文件中的数据可能不全;但在文件关闭时,不管但在文件关闭时,不管缓冲区是否已满,都要向磁盘文件中写一次,这样就能保证缓冲区是否已满,都要向磁盘文件中写一次,这样就能保证数据不丢失。数据不丢失。上一页返回下一页任务任务2文件的打开与关闭文件的打开与关闭
13、如不注意及时关闭文件,还会造成两个不良的后果。如不注意及时关闭文件,还会造成两个不良的后果。(1)出现文件不够用的错误。出现文件不够用的错误。C系统可以提供系统可以提供20个文件供用户使用,除了有个文件供用户使用,除了有5个被系统的个被系统的标准文件占用外,用户还可以使用标准文件占用外,用户还可以使用15个。虽然这个数目看着个。虽然这个数目看着很大,但如果多次打开文件而不注意随时关闭的话,仍然会很大,但如果多次打开文件而不注意随时关闭的话,仍然会产生文件不够用的现象。产生文件不够用的现象。(2)系统自动关闭文件。系统自动关闭文件。有时在文件打开太多的时候,系统会自动地关闭一些文件,有时在文件打
14、开太多的时候,系统会自动地关闭一些文件,这样关闭的文件,可能会造成数据的丢失。这样关闭的文件,可能会造成数据的丢失。上一页返回任务任务3文件的读写文件的读写8.3.1 文件的顺序读写文件的顺序读写对文件的读和写是最常用的文件操作。在对文件的读和写是最常用的文件操作。在c语言中提供了多种语言中提供了多种文件读写的函数。文件读写的函数。使用以上函数都要求包含头文件使用以上函数都要求包含头文件stdio.h 返回下一页任务任务3文件的读写文件的读写1.fputc()用用fputc()可以将指定的单个字符输出到磁盘文件中去,其可以将指定的单个字符输出到磁盘文件中去,其调用的一般形式为调用的一般形式为:
15、该函数的功能是将参数中指定的字符输出到文件指针所指向该函数的功能是将参数中指定的字符输出到文件指针所指向的磁盘文件中去。如果函数执行成功,返回被输出的字符的磁盘文件中去。如果函数执行成功,返回被输出的字符;否否则返回则返回EOF(文件结束标志,是系统预定义的符号常量,其值文件结束标志,是系统预定义的符号常量,其值为为-1)。上一页返回下一页任务任务3文件的读写文件的读写【例例8-1】将指定的字符输出到磁盘文件中。将指定的字符输出到磁盘文件中。上一页返回下一页任务任务3文件的读写文件的读写上一页返回下一页任务任务3文件的读写文件的读写2.fgetc()用用fgetc()可以一次从磁盘文件中读取一
16、个字符,其调用的可以一次从磁盘文件中读取一个字符,其调用的一般形式为一般形式为:该函数的功能是从文件指针所指向的文件中读取一个字符并该函数的功能是从文件指针所指向的文件中读取一个字符并把它赋值给字符变量,把它赋值给字符变量,fgetc()的返回值就是该字符。如果的返回值就是该字符。如果在执行坛在执行坛fgetc()时遇到文件结束符,则返回时遇到文件结束符,则返回EOF。可以利。可以利用该函数来判断文件中的数据是否被读完。用该函数来判断文件中的数据是否被读完。上一页返回下一页任务任务3文件的读写文件的读写【例例8-2】从磁盘文件中读取一个字符。从磁盘文件中读取一个字符。上一页返回下一页任务任务3
17、文件的读写文件的读写上一页返回下一页任务任务3文件的读写文件的读写3.fputs()用用fputs()可以将字符数组中的字符串输出到磁盘文件中,可以将字符数组中的字符串输出到磁盘文件中,其调用的一般形式为其调用的一般形式为:该函数的功能是将字符串输出到文件指针所指向的文件中去,该函数的功能是将字符串输出到文件指针所指向的文件中去,但字符串结束标志但字符串结束标志0不输出。不输出。【例例8-3】从键盘上输入从键盘上输入3个字符串,将它们输出到一个磁盘个字符串,将它们输出到一个磁盘文件中去。文件中去。上一页返回下一页任务任务3文件的读写文件的读写上一页返回下一页任务任务3文件的读写文件的读写上一页
18、返回下一页任务任务3文件的读写文件的读写4.fgets()用用fgets()可以从一个磁盘文件中读取一个字符串到字符数可以从一个磁盘文件中读取一个字符串到字符数组中,其调用的一般形式为组中,其调用的一般形式为:该函数的功能为从文件指针所指向的文件中读取该函数的功能为从文件指针所指向的文件中读取n-1个字符,个字符,并把它存放到字符数组中。如果在读入并把它存放到字符数组中。如果在读入n-1个字符完成之前个字符完成之前遇到换行符遇到换行符n或文件结束标志或文件结束标志EOF,则结束读取。但它会,则结束读取。但它会将遇到的换行符将遇到的换行符n也作为一个字符送入字符数组。在字符也作为一个字符送入字符
19、数组。在字符串读入后会自动加上一个字符串结束标志串读入后会自动加上一个字符串结束标志0。该函数的返。该函数的返回值为字符数组的首地址,若出错将返回回值为字符数组的首地址,若出错将返回NULL。上一页返回下一页任务任务3文件的读写文件的读写【例例8-4】从磁盘文件中读回字符串并在屏幕上显示。从磁盘文件中读回字符串并在屏幕上显示。上一页返回下一页任务任务3文件的读写文件的读写上一页返回下一页任务任务3文件的读写文件的读写5.fprintf()用用frintf()可以将数据以一定的格式输出到磁盘文件中去,可以将数据以一定的格式输出到磁盘文件中去,其调用的一般形式为其调用的一般形式为:该函数的功能是将
20、各输出项以格式控制字符串中所指定的格该函数的功能是将各输出项以格式控制字符串中所指定的格式输出到文件指针所指向的文件中去。式输出到文件指针所指向的文件中去。【例例8-5】格式化数据输出到磁盘文件。格式化数据输出到磁盘文件。上一页返回下一页任务任务3文件的读写文件的读写上一页返回下一页任务任务3文件的读写文件的读写6.fscanf()用用fscanf()可以以一定的格式将数据从磁盘文件中读取出来,可以以一定的格式将数据从磁盘文件中读取出来,其调用的一般形式为其调用的一般形式为:该函数的功能是以格式控制字符串中所指定的格式将数据从该函数的功能是以格式控制字符串中所指定的格式将数据从文件指针所指向的
21、文件中读取出来,然后分别送给指定的变文件指针所指向的文件中读取出来,然后分别送给指定的变量。量。【例例8-6】以一定的格式从磁盘文件中读取数据并在屏幕上以一定的格式从磁盘文件中读取数据并在屏幕上显示。显示。上一页返回下一页任务任务3文件的读写文件的读写上一页返回下一页任务任务3文件的读写文件的读写上一页返回下一页任务任务3文件的读写文件的读写7.fwrite()用用fwrite()可以将一批数据可以将一批数据(如数组所有元素值、结构体变如数组所有元素值、结构体变量的值量的值)作为一个整体一次性写入磁盘文件,其调用的一般形作为一个整体一次性写入磁盘文件,其调用的一般形式为式为:该函数的功能是从该
22、函数的功能是从buffer所代表的起始地址开始,每次输出所代表的起始地址开始,每次输出字节大小为字节大小为size的数据块,共输出的数据块,共输出count次,输出到年所指次,输出到年所指向的磁盘文件中去,若函数执行成功则返回向的磁盘文件中去,若函数执行成功则返回count的值。的值。应当注意应当注意:用用fwrite()实行按实行按“块块”操作,必须采用二进制操作,必须采用二进制方式。方式。上一页返回下一页任务任务3文件的读写文件的读写【例例8-7】从键盘上输入一批学生信息并输出到磁盘文件中。从键盘上输入一批学生信息并输出到磁盘文件中。上一页返回下一页任务任务3文件的读写文件的读写上一页返回
23、下一页任务任务3文件的读写文件的读写上一页返回下一页任务任务3文件的读写文件的读写上一页返回下一页任务任务3文件的读写文件的读写8.fread()用用fread()可以将磁盘文件中的一批数据可以将磁盘文件中的一批数据(如数组所有元素值、如数组所有元素值、结构体变量的值结构体变量的值)作为一个整体一次性读取出来,其调用的一作为一个整体一次性读取出来,其调用的一般形式为般形式为:该函数的功能是从该函数的功能是从fp所指向的磁盘文件中每次读取字节大小所指向的磁盘文件中每次读取字节大小为为size的数据块,共读取的数据块,共读取count次,存放到以次,存放到以buffer为起为起始地址的内存空间中,
24、若函数执行成功则返回始地址的内存空间中,若函数执行成功则返回count的值。的值。应当注意应当注意:fread()也是实行按也是实行按“块块”操作,也必须采用二进操作,也必须采用二进制方式。制方式。上一页返回下一页任务任务3文件的读写文件的读写8.3.2 文件的随机读写文件的随机读写前面介绍的对文件的读写方式都是顺序读写,即读写文件只前面介绍的对文件的读写方式都是顺序读写,即读写文件只能从头开始,顺序读写各个数据,但在实际中常要求只读写能从头开始,顺序读写各个数据,但在实际中常要求只读写文件中某一指定的部分。从前面的学习中可知,在文件内部文件中某一指定的部分。从前面的学习中可知,在文件内部有一
25、个系统自动设置的有一个系统自动设置的“读写位置指针读写位置指针”,只要将位置指针,只要将位置指针移动到需要的地方,就能实现文件的随机读写。实现文件随移动到需要的地方,就能实现文件的随机读写。实现文件随机读写的关键是要准确地移动位置指针,这称为文件的定位。机读写的关键是要准确地移动位置指针,这称为文件的定位。在在C语言中,文件的定位及相关操作也是由库函数来完成的。语言中,文件的定位及相关操作也是由库函数来完成的。上一页返回下一页任务任务3文件的读写文件的读写1.fseek()利用利用fseek()可以将位置指针移动到所需位置,其一般调用可以将位置指针移动到所需位置,其一般调用形式为形式为:fee
26、ek(文件指针变量,位移量,起始点文件指针变量,位移量,起始点);该函数的作用是以该函数的作用是以“起始点起始点”为基准,将文件指针所指向的为基准,将文件指针所指向的文件中的位置指针按指定的文件中的位置指针按指定的“位移量位移量”进行移动。其中,进行移动。其中,“位移量位移量”为为long类型的数据,表示要移动的字节数,可正可类型的数据,表示要移动的字节数,可正可负。若位移量为正数,表示从文件开头向文件末尾移动负。若位移量为正数,表示从文件开头向文件末尾移动;否则否则移动方向相反。移动方向相反。“起始点起始点”指的是以什么地方为基准进行移指的是以什么地方为基准进行移动,它可用数字表示,也可用宏
27、名来表示,其表示方法如动,它可用数字表示,也可用宏名来表示,其表示方法如表表9-2所示。如果函数执行成功,返回值为所示。如果函数执行成功,返回值为0;否则为非否则为非0值。值。上一页返回下一页任务任务3文件的读写文件的读写例如例如需要注意的是,需要注意的是,fseek()一般用于二进制文件。在文本文件一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误。中由于要进行转换,故往往计算的位置会出现错误。上一页返回下一页任务任务3文件的读写文件的读写2.rewind()利用利用rewind()可以使位置指针重新返回文件的开头处。其可以使位置指针重新返回文件的开头处。其一般调用形
28、式为一般调用形式为:rewind(文件指针变量文件指针变量);该函数没有返回值。该函数没有返回值。3.ftell()利用利用ftell)可以知道位置指针的当前指向。其一般调用形式可以知道位置指针的当前指向。其一般调用形式为为:ftell(文件指针变量文件指针变量);该函数的返回值为文件指针所指向该函数的返回值为文件指针所指向的文件中位置指针的当前指向,如果出错,则返回的文件中位置指针的当前指向,如果出错,则返回-1上一页返回下一页任务任务3文件的读写文件的读写8.3.3 文件检侧文件检侧1.feof()调用的一般形式为调用的一般形式为:feof(文件指针变量文件指针变量);它的功能是判断文件是
29、否处于文件结束位置,如文件结束,它的功能是判断文件是否处于文件结束位置,如文件结束,则返回值为则返回值为1;否则为否则为02.ferror()在在C语言中,大多数的文件操作函数并没有明确的出错信息返语言中,大多数的文件操作函数并没有明确的出错信息返回。因此,回。因此,C语言提供了一个可以检测文件操作是否出错的语言提供了一个可以检测文件操作是否出错的ferror,其调用的一般格式为,其调用的一般格式为:ferror(文件指针变量文件指针变量);上一页返回下一页任务任务3文件的读写文件的读写如果最近一次文件操作成功,则如果最近一次文件操作成功,则ferror()的返回值为。的返回值为。;否则否则返回一个非返回一个非0值。在打开一个文件时,系统会自动使值。在打开一个文件时,系统会自动使ferror()的初值为的初值为0。需要注意的是,因为每个文件操作都设置错误条件,所以如需要注意的是,因为每个文件操作都设置错误条件,所以如果想检测文件操作是否出错,应在调用该文件操作函数之后果想检测文件操作是否出错,应在调用该文件操作函数之后马上用马上用ferror()进行检测,以防止丢失错误状态。进行检测,以防止丢失错误状态。上一页返回表表8-1 C系统的标准设备文件系统的标准设备文件返回表表8-2文件打开方式说明文件打开方式说明返回表表9-2起始点的宏名表示起始点的宏名表示返回
限制150内