120 likes | 273 Views
单元 11 项目中学生数据的存储与重用 ---- 文件的打开与关闭. 学习目标: (1) 能力目标 ①能使用 fopen() 函数正确打开已知文件。 ②能正确使用“文件打开方式”设计文件打开函数。 ③能使用 fclose() 函数正确关闭文件。 (2) 知识目标 ①理解文件、文件类型、文件指针、文件缓冲区的概念。 ②理解文件指针在打开文件和关闭文件时与文件的关系。 ③正确理解十二种“文件打开方式”的含义。 能力训练: 1. 能用 if-else 语句实现读写文本文件的打开与关闭操作。
E N D
单元11 项目中学生数据的存储与重用----文件的打开与关闭 • 学习目标: (1)能力目标 ①能使用fopen()函数正确打开已知文件。 ②能正确使用“文件打开方式”设计文件打开函数。 ③能使用fclose()函数正确关闭文件。 (2)知识目标 ①理解文件、文件类型、文件指针、文件缓冲区的概念。 ②理解文件指针在打开文件和关闭文件时与文件的关系。 ③正确理解十二种“文件打开方式”的含义。 • 能力训练: 1.能用if-else语句实现读写文本文件的打开与关闭操作。 2.能用if-else语句实现读写二进制文件的打开与关闭操作。 3.能用if-else语句实现追加文本文件的打开与关闭操作。 4.能用if-else语句实现追加二进制文件的打开与关闭操作。
单元11 项目中学生数据的存储与重用---- 11.1必备知识与理论 11.1必备知识与理论 11.1.1文件的概念 文件是程序设计中一个重要的概念。所谓“文件”一般指存储在外部介质上的数据集合。C语言把文件的概念扩大化了,它将一些设备也当作文件来处理,这样就使程序设计更加具有灵活性和通用性。这一点很重要,就是说C语言不仅仅将数据的集合当成文件,它还可以是设备,如键盘显示器和打印机。 一般而言,我们理解的文件还是指存储在外部介质上数据的集合。操作系统是以文件为单位对数据进行管理的,也就是说,如果想找到存储在外部介质上的数据,必须先按文件名找到所指定的文件,然后再从该文件中读取数据。向外部介质上存储数据也必须先建立一个文件,才能向它输出(写)数据。 我们知道从键盘上输入的数据是存放在内存中,显示器可以将内存中的数据显示输出。文件保存在外部介质中,“读”文件操作就是将磁盘文件输入到内存中,“写”文件操作就是将内存中的数据输出到外部介质中。这一点希望同学们能认真理解和体会。它是学习文件这一章面临的首要问题。 C语言将文件看成是存储在外部介质中的字符集。根据数据在外部介质中存储的不同方式,C语言的文件又分为ASCII文件和二进制文件。 ASCII文件:又称为文本文件(txt)文件,特点是数据在外部介质中一个字节存放一个ASCII码字符。 二进制文件:是把内存中的数据按其在内存中的存储形式原样输出到外部介质上存放。
单元11 项目中学生数据的存储与重用---- 11.1.1文件的概念 例:如果要存放整数12345,我们知道整数在内存中是占两个字节的,12345作为文本文件和作为二进制文件在内存中存放有着较大的区别。 (12345)10 =(11000000111001)2 从上面可以清楚地看到,以ASCII形式存放需要占用5个字节,以二进制形式只需要两个字节。 因此,一个C文件是一个字节流或二进制流。所谓“流”是一系列字节,它可以从一种类型的设备流向另一种类型的设备。就文件流来说,通过流连接起来的两个设备是计算机的内存和磁盘上的文件。 在C语言中对文件的存取是以字符(字节)为单位的,输入输出数据的开始和结束仅受程序控制而不受物理符号(如回车换行符)控制。也就是说,在输出时不会自动增加回车换行符以作为结束的标志,输入时不以回车换行符为记录的间隔。我们把这种文件称之为流式文件。
单元11 项目中学生数据的存储与重用---- 11.1.1文件的概念 C语言处理文件的方法是采用“缓冲文件系统”的方式。所谓缓冲文件的方式是指系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘。如果从磁盘向内存读入数据,则从磁盘文件中先将一批数据输入到内存缓冲区,然后再从缓冲区逐个地将数据送到程序数据区,如图9.1所示。 图9.1 键盘、显示器输入输出与磁盘文件读写示意图
单元11 项目中学生数据的存储与重用---- 11.1.2 文件的基本操作 11.1.2 文件的基本操作 1.文件的打开和关闭 文件在使用(读\写)之前必须先“打开”该文件,在使用结束之后应当关闭该文件。 (1)文件的打开(fopen函数) C语言用fopen( )函数来实现打开文件。fopen函数的调用方式如下: 其中FILE为系统定义的有关文件信息的结构体类型,有关具体内容同学们可以查看相关书籍,这里不再叙述。*fp是指向文件的指针变量。 fopen 函数有两个参数: 文件名:被打开的文件名字。 使用文件方式:包括对文件是读还是写等。(见表11.1文件使用方式表) 打开文件就是建立文件指针与文件的联系,即建立文件指针与文件名的对应关系。 同学们想一想fopen函数的返回值是什么?返回值是文件首地址,显然fp是指向了文件的首地址的文件指针。例如: fp=fopen (“a1”,“r”); 被打开的文件名叫a1,并且以“读”方式打开。 fp指向文件的首地址,如图11.1所示。 FILE *fp: fp=fopen(文件名,使用文件方式);
单元11 项目中学生数据的存储与重用---- 11.1.2 文件的基本操作 表11.1 文件使用方式表 图11.1 文件指针变量fp指向文件首地址示意图
单元11 项目中学生数据的存储与重用---- 11.1.2 文件的基本操作 打开一个文件时,系统得到三个方面的信息: ①需要打开的文件名,也就是准备访问的文件名字。 ②使用文件的方式(是“读”还是“写”)。 ③让哪一个指针变量指向被打开的文件。 说明: ①用“r”方式打开文件(无论是“r”、还是“rb”、还是“r+”、还是“rb+”),用于“读”,即磁盘文件输入到内存中。 ②用“w”方式打开文件(无论是“w”、还是“wb”、还是“w+”、还是“wb+”),用于“写”,即内存数据输出到磁盘文件中。打开文件时,如果原来不存在该文件,则在打开时新建一个以指定名字命名的文件,如果原来已存在一个以该文件名命名的文件,则在打开时将该文件删去,然后重新建立一个以该名字命名的新文件。 ③凡带“+”号的打开方式,打开文件时总是又能“读”,也能“写”。 ④“a”方式打开文件时,位置指针移到文件末尾,可以实现追加操作。 ⑤“b”方式打开文件时,可以对二进制文件进行操作。 ⑥如果以“r”方式打开一个并不存在的文件,或在磁盘损坏、磁盘空间不足等情况下打开文件,都会使打开文件失败。此时fopen函数将返回一个空指针NULL,所以常用下面的方法打开一个文件。
单元11 项目中学生数据的存储与重用---- 11.1.2 文件的基本操作 if((fp=fopen(“file1”, “r”))==NULL) { printf(“cannot open this file\n”); exit(0);//即出程序,返回系统库函数。 } 打开文件流程如图11.2所示。 图11.2 打开文件流程图
单元11 项目中学生数据的存储与重用---- 11.1.2 文件的基本操作 (2)文件的关闭(fclose函数) 一个文件使用完后应该及时关闭它,以防止它再被误用。关闭文件操作完成下面两件事。 ①关闭文件缓冲区,将还没有装满的缓冲区数据输出到磁盘文件中,保证数据不丢失。 ②“关闭”就是使文件指针变量不指向该文件,也就是文件指针变量与文件“脱钩”,释放文件指针变量。 关闭文件的格式: 例如:fclose(fp); 前面我们曾把打开文件时所带回的指针赋给了fp,现在通过fp把该文件关闭,即fp不再指向该文件。 fclose函数也带回一个值,如果顺利地执行了关闭操作,则返回值为0;否则返回EOF(-1)。 fclose(文件指针);
单元11 项目中学生数据的存储与重用---- 11.1.2 文件的基本操作 例1: FILE *fp;//定义文件指针fp if((fp=fopen(filename,“w”))==NULL)/*创建一个文本文件filename用于写*/ { printf("can not creat the file.\n"); exit(0); } fclose(fp); /*关闭文件*/ 例2: FILE *fpin;//定义文件指针fpin if((fpin=fopen(infile,"r"))==NULL) /*以读方式打开infile源文件*/ { printf("can not open the source file.\n"); exit(0); } fclose(fpin); /*关闭文件*/
单元11 项目中学生数据的存储与重用---- 11.1.2 文件的基本操作 例3: FILE *fp;//定义文件指针fp if((fp=fopen("fbinary","wb"))==NULL)//以写方式开打二进制fbinary文件 { printf("can not open this file.\n"); exit(0); } fclose(fp);//关闭二进制文件 例4: FILE *fp;//定义文件指针fp if((fp=fopen("fbinary","rb"))==NULL)//以读方式开打二进制fbinary文件 { printf("can not open this file.\n"); exit(0); } fclose(fp);//关闭二进制文件
单元11 项目中学生数据的存储与重用---- 课后作业与思考 1.填空题: (1)在C语言中,文件可以用方式存取,也可以用存取。 (2)打开文件的含义是,关闭文件的含义是。 (3)文本文件在内存中以方式存储,二进制文件在内存中以。 (4)fopen()函数有两个形式参数,一个表示,另一个表示。 (5)使用fopen(“abc”,“r+”)打开文件时,若abc文件不存在,则。 (6)使用fopen(“abc”,“w+”)打开文件时,若abc文件不存在,则。 (7)使用fopen(“abc”,“a+”)打开文件时,若abc文件不存在,则。 (8)使用fopen(“abc”,“a+”)打开文件时,所有的写操作均在文件末尾进行,这句话是。 (9)使用fopen(“abc”,“w+”)打开文件时,写入新数据保留原数据的操作均在文件末尾进行,这句话是。 2.选择题: (1)若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件打开方式字符串应是。 A.“ab+” B.“wb+” C.“rb+” D.“ab” (2)以下可作为函数fopen中第一个参数的正确格式是。 A.c:user\text.txt B.c:\user\text.txt C.“c:\user\text.txt” D.“c:\\user\\text.txt”