2022年C语言文件操 .pdf
《2022年C语言文件操 .pdf》由会员分享,可在线阅读,更多相关《2022年C语言文件操 .pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、文件教学目标:了解文件的概念; 熟练掌握缓冲文件系统和非缓冲文件系统的概念及其区别;熟练掌握文件类型指针的概念;熟练掌握打开文件和关闭文件的方法;熟练掌握利用标准 I/O 提供的四种读写文件的方法对文件进行顺序读写和随机读写;了解文件操作的出错检测方法。教学重点: 缓冲文件系统与非缓冲文件;文件类型指针;文件的打开与关闭;利用标准 I/O 提供的四种读写文件的方法对文件进行顺序读写和随机读写。教学难点: 缓冲文件系统与非缓冲文件;利用标准 I/O 提供的四种读写文件的方法对文件进行顺序读写操作和随机读写操作。11.1 文件概述11.1.1 文件的概念所谓文件是指记录在外部存储介质上的数据集合。
2、例如,用EDLN 编辑好的一个源程序就是一个文件, 把它存储到磁盘上就是一个磁盘文件。从计算机上输出一个源文件到打印机, 这也是一个文件。 广义上说, 所有输入输出设备都是文件。例如,键盘、显示器、打印机都是文件。计算机以这些设备为对象进行输入输出,对这些设备的处理方法统一按文件处理。计算机中的文件可以从不同角度进行分类:(1) 按文件介质:磁带文件、磁盘文件和卡片文件等。(2) 按文件内容:源程序文件、目标文件、可执行文件和数据文件等。(3) 按文件中数据的组织形式:二进制文件和文本文件。文本文件是指文件的内容是由一个一个的字符组成,每一个字符一般用该字符对应的 ASCII 码表示。例如,一
3、个实数136.56 占 6 个字符。二进制文件是以数据在内存中的存储形式原样输出到磁盘上去。例如,实数136.56 在内存中以浮点形式存储,占 4 个字符,而不是 6 个字节。若以二进制形式输出此数,就将该 4 个字节按原来在内存中的存储形式送到磁盘上去。不管一个实数有多大,都占 4 个字节。一般来说,文本文件用于文档资料的保存,方便用户阅读理解;二进制文件节省存储空间而且输入输出的速度比较快。因为在输出时不需要把数据由二进制形式转换为字符代码, 在输入时也不需要把字符代码先换成二进制形式然后存入内存。 如果存入磁盘中的数据只是暂存的中间结果数据,以后还要调入继续处理, 一般用二进制文件以节省
4、时间和空间。如果输出的数据是准备作为文档供给人们阅读的, 一般用字符代码文件, 它们通过显示器或打印机转换成字符输出,比较直观。11.1.2 缓冲文件系统和非缓冲文件系统目前 C 语言所使用的磁盘文件系统有两大类:一类称为缓冲文件系统,又称为标准文件系统或高层文件系统;另一类称非缓冲文件系统, 又称为低层文件系统。(1) 缓冲文件系统的特点对程序中的每一个文件都在内存中开辟一个“ 缓冲区 ” 。 从磁盘文件输入的数据先送到 “ 输入缓冲区 ” ,然后再从缓冲区依次将数据送给接收变量。在向磁盘文件输出数据时, 先将程序数据区中变量或表达式的值送到“ 输出缓冲区 ” 中,然后名师资料总结 - -
5、-精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 待装满缓冲区后一起输出给磁盘文件。这样做的目的是减少对磁盘的实际读写次数。因为每一次对磁盘的读写都要移动磁头并寻找磁道扇区,这个过程要花一些时间的,如果每一次用读写函数时都要对应一次实际的磁盘访问,那么就会花费较多的读写时间。 用缓冲区就可以一次读入一批数据,或输出一批数据, 即不是执行一次输入或输出函数就实际访问磁盘一次,而是若干次读写函数语句对应一次实际的磁盘访问。 缓冲文件系统自动为文件设置所需的
6、缓冲区,缓冲区的大小随机器而异。(2) 非缓冲区文件系统的特点系统不自动设置缓冲区,而由用户根据自己需要设置。(3) 缓冲区文件系统与非缓冲区文件系统的比较这两种文件系统分别对应使用不同的输入输出函数。应该说,缓冲文件系统功能强、使用方便,由系统代替用户做了许多事情,提供了许多方便。而非缓冲系统则直接依赖于操作系统, 通过操作系统的功能直接对文件进行操作。所以它称为系统输入输出或低层输入输出系统。在传统的 UNIX 标准中,用缓冲文件系统对文本文件进行操作,用非缓冲文件系统对二进制文件进行操作。ANSI 只建议使用缓冲文件系统,并对缓冲文件系统的功能进行了扩充,使之既能用于处理文本文件又能处理
7、二进制文件。缓冲区文件系统的输入输出称为标准输入输出(标准 I/O) , 非缓冲区文件系统的输入输出称为系统级输入输出(系统 I/O) 。(4)标准 I/O 读写文件的方法读写一个字符: fgetc 函数和 fputc 函数。读写一个字符串: fgets函数和 fputs 函数。格式化读写: fscanf 函数和 fprintf 函数。读写一个记录: fread函数和 fwrite 函数。前三种读写方法和以前介绍的以终端为对象的读写方法相似,其含义如P295表 9.1 所示。对这三种标准 I/O 函数是很好理解且使用很方便的,第四种按记录读写的函数在原来UNIX 的缓冲文件系统中是没有的,是
8、ANSI C 扩充的功能,用来读写一个数据块。11.1.3 文件类型指针要调用一个文件,需要提供以下一些信息:文件当前的读写位置;与该文件对应的内存缓冲区的地址; 缓冲区中未被处理的字符数;文件操作方式等。 缓冲文件系统为每一个文件开辟一个“ 文件信息区 ” ,用来存放以上这些信息。 这个“ 文件信息区 ” 在内存中,是一个结构体变量,这个结构体变量是由系统定义的,用户不必定义。其形式为:typeder struct FILE; 上面结构体的成员就是用来存放以上信息的数据项。对FILE 的定义是在stdio.h 头文件中由系统事先指定的。 只要程序中用到一个文件, 系统就为此文件开辟一个如上定
9、义的结构体变量存储该文件的有关信息。这个结构体变量不用变名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - 量名来标识, 而设置一个指向该结构体变量的指针变量,通过指针变量来访问该结构体变量。定义文件类型指针变量的语法格式为:FILE * 文件结构体指针变量名 ; 例如:FILE *fp1, *fp2, *fp3; 文件指针是缓冲文件系统的一个很重要的概念,只有通过文件指针才能调用相应的文件。11.2 文件打开与关闭11.2.1 文
10、件的打开对磁盘文件的操作必须是“ 先打开,后读写,最后关闭” 。所谓“ 打开文件 ” 就是在程序和操作系统之间建立起联系,程序把所要操作文件的一些信息通知给操作系统。 这些信息中除包括文件名外, 还要指出文件操作方式是读还是写:(1)读文件。首先确定此文件是否已存在,如果存在则将读写当前位置设定在文件开头,以便从文件开头读取数据,否则进行错误处理。(2)写文件。首先检查原来是否有同名文件,如果有则将该文件删除并建立一个新文件, 否则就将读写当前位置设定在文件开头,以便从文件开头写入数据。打开文件用 fopen函数实现。它的调用语法格式为:fopen(文件名 ,文件使用方式 ); 例如:fope
11、n( “file.txt”, “r ”);表示要打开file.txt 文件,对文件的使用方式为只读方式。文件操作方式见P297表 9.2。调用 fopen 函数之后, fopen 函数有一个返回值。它是一个地址值,指向被打开文件的文件信息区的起始地址。如果打开文件失败,则返回一个NULL 指针。fopen 函数的返回值应当立即赋给一个文件类型指针变量,以便以后能通过该指针变量来访问此文件, 否则此函数返回值就会丢失而导致程序中无法对此文件进行操作。简而言之,在打开一个文件时,程序通知编译系统三个方面的信息:(1)要打开哪一个文件,以 “ 文件名 ” 指出。(2)对文件的使用方式。(3)函数的返
12、回值赋给哪一个指针变量,或者说让哪一个指针变量指向该文件。对于磁盘文件, 在使用前要先打开, 而对终端设备, 尽管它们也作为文件来处理,但为什么在前面的程序中从未使用过打开文件的操作吗?这是由于在程序运行时,系统自动地打开三个标准文件:标准输入、标准输出和标准出错输出。系统自动地定义了三个指针变量:stdin,stdout,stderr分别指向标准输入、标准输出和标准出错输出。 这三个文件都是以终端设备作为输入输出对象的。如果指定输出一个数据到 stdout所指向的文件,就是指输出到终端设备。为使用方便,允名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - -
13、 - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - 许在程序中不指定这三个文件, 也就是说,系统隐含的标准输入输出文件是指终端。11.2.2 文件的关闭关闭文件用 fclose 函数实现。调用 fopen函数的语法格式为:fclose(文件指针变量 ); 关闭文件的功能是通知系统将此指针指向的文件关闭,释放相应的文件信息区。这样,原来的指针变量不再指向该文件,以后也就不可能通过此指针变量来访问该文件。 如果关闭的是写操作的文件, 则系统在关闭该文件之前先将输出文件缓冲区的内容全部输出给文件,然后关闭文件。 如果不关闭文
14、件而直接使程序停止运行, 这时会丢失缓冲区中还未写入文件的部分信息。因此必须注意, 文件用完之后必须关闭。如果关闭文件操作正确,则fclose 函数返回 0,否则返回 -1。11.3 文件的顺序读写11.3.1 输入和输出一个字符C 语言提供了一个输出一个字符到磁盘文件的fputc 函数。例如:fputc(ch,fp); 的功能把字符变量 ch的值输出到指针变量fp 所指向的 FILE 结构体的文件。这个 fp 是用 fopen 函数打开时得到的。如果调用成功,则返回该字符,否则返回 EOF。C 语言提供了一个从磁盘文件中接收一个字符fgetc 函数。例如:ch=fgetc(fp); 的功能是
15、从指针变量fp 所指向的文件中读入一个字符并赋给字符变量ch。如果执行 fgetc 函数时遇到文件结束或出错,则返回EOF。例 11.1 从键盘上输入一串字符送到文件file1.txt 中,然后再从该文件中读出所有的字符。#include “stdio.h”#include “stdlib.h”main( ) FILE *fp; char ch; if (fp=fopen(“file1.txt”, “w”)=NULL)printf(“cannot open this filen”); exit(0);while (ch=getchar( )!=, n?) fputc(ch,fp);fclose
16、(fp); if (fp=fopen(“file1.txt”, “r ”)= = NULL)printf(“cannot open this filen”); exit(0);while (ch=fgetc(fp )!=EOF) putchar(ch); fclose(fp); 程序中在终端输入字符、显示字符的语句:ch=getchar(); putchar(ch); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - 也可改为:c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年C语言文件操 2022 语言 文件
限制150内