面向对象的程序设计语言——C++ 第二版 教学课件 ppt 作者 陈志泊 第10章

上传人:E**** 文档编号:89494855 上传时间:2019-05-25 格式:PPT 页数:41 大小:359.50KB
返回 下载 相关 举报
面向对象的程序设计语言——C++ 第二版  教学课件 ppt 作者  陈志泊 第10章_第1页
第1页 / 共41页
面向对象的程序设计语言——C++ 第二版  教学课件 ppt 作者  陈志泊 第10章_第2页
第2页 / 共41页
面向对象的程序设计语言——C++ 第二版  教学课件 ppt 作者  陈志泊 第10章_第3页
第3页 / 共41页
面向对象的程序设计语言——C++ 第二版  教学课件 ppt 作者  陈志泊 第10章_第4页
第4页 / 共41页
面向对象的程序设计语言——C++ 第二版  教学课件 ppt 作者  陈志泊 第10章_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《面向对象的程序设计语言——C++ 第二版 教学课件 ppt 作者 陈志泊 第10章》由会员分享,可在线阅读,更多相关《面向对象的程序设计语言——C++ 第二版 教学课件 ppt 作者 陈志泊 第10章(41页珍藏版)》请在金锄头文库上搜索。

1、第10章,文件,北京林业大学 软件教研室,2,本章主要内容,(1)掌握文件的基本概念。 (2)掌握用FILE结构进行文件的打开、读写和关闭的方法。 (3)了解文件流类的继承关系。 (4)掌握文件流进行文件的打开、读写和关闭的方法。,北京林业大学 软件教研室,3,文件是指存储在存储介质上的数据的集合。 按文件中数据的存放形式可将文件分为: ASCII文件 又称文本文件,它的每一个字节存放一个ASCII代码,代表一个字符; 其优点是可直接按字符形式输出文件的内容,也可用一般的字处理软件直接打开并查看文件的内容; 二进制文件 将数据用二进制形式存放在文件中,并保持了数据在内存中存放的原有格式; 其优

2、点是存储效率高,无须进行存储形式的转换,但不能直接按字符形式输出。,北京林业大学 软件教研室,4,无论是文本文件还是二进制文件都需要用“文件指针”来操纵,此处的“文件指针”是指表示读写文件的文件位置指示器。 一个文件指针总是和一个文件相关联,当文件每一次打开时,文件指针都指向文件的开始; 随着对文件进行操作,文件指针不断地在文件中移动,并一直指向最新处理的字符(字节)位置。,北京林业大学 软件教研室,5,对文件的读写操作有两种方式: 顺序文件操作 从文件的第一个字符(字节)开始顺序地处理到文件的最后一个字符(字节)。 只能从文件的开始处依次顺序读写文件内容,而不能任意读写文件内容。 随机文件操

3、作 在文件中通过C+相关的函数移动文件指针,并指向所要处理的字符(字节)。 可以在文件中来回移动文件指针和非顺序地读写文件内容。 能快速地检索、修改和删除文件中的信息。,北京林业大学 软件教研室,6,10.1 通过FILE结构进行文件操作,C+保留了ANSI C对文件的处理方式,程序对每个文件都使用一个单独的FILE结构来处理。 每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件的名字、文件状态、文件当前位置等)。 这些信息保存在一个类型为FILE的结构体变量中。 该结构体类型FILE是由系统定义的。,北京林业大学 软件教研室,7,在stdio.h文件中对FILE结构体类型是

4、这样定义的: typedef struct int _fd; /文件号 int _cleft; /缓冲区中剩余的字符 int _mode; /文件操作模式 char *_nextc; /下一个字符位置 char *_buff; /文件缓冲区位置 FILE;,北京林业大学 软件教研室,8,定义文件型指针变量,如:FILE *fp; fp是一个指向FILE类型结构体的指针变量。 可以使fp指向某一个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该文件。 如果有n个文件,一般应设n个指针变量,使它们分别指向n个文件以实现对文件的访问。 对文件读写之前应该“打开”该文件,在使用结束之后应“

5、关闭”该文件。,北京林业大学 软件教研室,9,10.1.1 打开文件,stdio.h文件中定义的fopen()函数实现文件的建立和打开操作。 FILE *fp; fp=fopen(文件名,文件的使用方式);,FILE *fp; fp=fopen(“abc.txt“,“r“); 要打开名字为abc.txt的文件; 文件的使用方式为“读入” fopen函数带回指向abc.txt文件的指针并赋给fp,这样fp就和文件abc.txt相联系了,或者说fp指向abc.txt文件。,北京林业大学 软件教研室,10,在打开一个文件时,通知给编译系统以下3个信息: (1)需要打开的文件名,也就是准备访问的文件的

6、名字。 (2)使用文件的方式(“读”还是“写”等)。文件的使用方式如表所示。 (3)让哪一个指针变量指向被打开的文件。,北京林业大学 软件教研室,11,说明: (1)用“r“方式打开的文件只能用于向计算机输入而不能用作向该文件输出数据,而且该文件应该已经存在,不能用“r“方式打开一个并不存在的文件,否则出错。 (2)用“w”方式打开的文件只能用于向该文件写数据,而不能用来向计算机输入。 如果原来不存在该文件则在打开时新建立一个以指定的名字命名的文件。 如果原来已存在一个以该文件名命名的文件,则在打开时将该文件删去,然后重新建立一个新文件。,北京林业大学 软件教研室,12,(3)如果希望向文件末

7、尾添加新的数据(不希望删除原有数据),则应该用“a“方式打开。但此时该文件必须已存在,否则将得到出错信息。打开时,位置指针移到文件末尾。 (4)用“r+“、“w+“、“a+“方式打开的文件既可以用来输入数据,也可以用来输出数据。 用“r+“方式时该文件应该已经存在。 用“w+“方式则新建立一个文件,先向此文件写数据,然后可以读此文件中的数据。 用“a+“方式打开的文件,原来的文件不被删去,位置指针移到文件末尾,可以添加,也可以读。,北京林业大学 软件教研室,13,(5)如果不能实现“打开”的任务,fopen函数将会带回一个出错信息。出错的原因可能是: 用“r“方式打开一个并不存在的文件; 磁盘

8、出故障; 磁盘已满无法建立新文件等。 常用下面的方法打开一个文件: if (fp=fopen(“file“,“w“)=NULL) cout“cannot open this file.n“endl;,北京林业大学 软件教研室,14,(6)用以上方式可以打开文本文件或二进制文件,这是ANSI C的规定,用同一种缓冲文件系统来处理文本文件和二进制文件。,北京林业大学 软件教研室,15,10.1.2 关闭文件,关闭”就是使文件指针变量不指向该文件,除非再次打开,使该指针变量重新指向该文件。 用fclose函数可以实现文件的关闭操作。 fclose(文件指针); fclose函数也带回一个值,当顺利执

9、行了关闭操作,则返回值为0;否则返回EOF(即-1)。 【例10-1】打开一个文本文件file,然后将其关闭,并判断文件是否关闭成功。,北京林业大学 软件教研室,16,10.1.3 文件读写,文件的读操作是指从磁盘文件向程序读入数据的过程,因此该文件必须以读或读写的方式打开。 每次调用完相应的读函数,文件的指针都将自动移动到下一次读写的位置上。 文件的写操作是指将程序中的数据写到磁盘文件中,因此该文件必须以写或读写的方式打开。 每次调用完相应的写函数,文件的指针都将自动移动到下一次读写的位置上。,北京林业大学 软件教研室,17,1顺序文件操作 (1)fgetc和fputc函数 fgetc函数的

10、功能是从指定的文件读入一个字符,该文件必须是以读或读写方式打开的。 ch=fgetc(fp); 其中,fp为文件型指针变量,ch为字符变量。 fgetc函数带回一个字符赋给ch。 如果在执行fgetc函数读字符时遇到文件结束符,函数返回一个文件结束标志EOF(即-1)。 EOF是在stdio.h文件中定义的符号常量,值为-1。,北京林业大学 软件教研室,18,如果想从一个磁盘文件顺序读入字符并在屏幕上显示出来,可以用以下程序段来实现: ch=fgetc(fp); while(ch!=EOF) putchar(ch); ch=fgetc(fp); ,北京林业大学 软件教研室,19,fputc函数

11、的功能是把一个字符写到磁盘文件上去。 fputc(ch,fp); fputc函数如果输出成功则返回值就是输出的字符;如果输出失败,则返回一个EOF(即-1)。 【例10-2】将一个磁盘文件中的信息复制到另一个磁盘文件中。,北京林业大学 软件教研室,20,(2)fgets和fputs函数 fgets函数的功能是从指定文件读入一个字符串如: fgets(str,n,fp); n为要求得到的字符,放到字符数组str中,如果在读入过程中遇到换行符或EOF,读入结束。 fgets函数的返回值为str的首地址。,北京林业大学 软件教研室,21,fputs函数的功能是向指定的文件输出一个字符串如语句: fp

12、uts(“Olympic“,fp); 把字符串“Olympic“输出到fp指向的文件。 gets和puts函数以字符串为读写对象 fgets和fputs函数以指定的文件为读写对象。,北京林业大学 软件教研室,22,(3)fscanf和fprintf函数 fscanf、fprintf函数与scanf、printf函数的作用相仿,但scanf和printf函数的读写对象是终端(屏幕),而fscanf和fprintf函数的读写是磁盘文件。 fprintf(文件指针,格式字符串,输出表列); fscanf(文件指针,格式字符串,输入表列); 例如: fprintf(fp,”%d,% f”,i,t);,

13、北京林业大学 软件教研室,23,2随机文件操作,fwrite函数的功能是用来读写一个数据块。 fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); buffer是一个指针,是读入或输出数据的地址。 size是要读写的字节数。 count是要进行读写多少个size字节的数据项。 fp为文件型指针。 例如: fread(f,4,2,fp);,北京林业大学 软件教研室,24,(2)文件定位函数 文件的随机读写就是可以将文件指针直接定位在所要求读写的位置上,而不必从文件头开始直到要求的位置再进行读写。 rewind函数 rewind函数的

14、功能是使位置指针重新返回到文件的开头。该函数没有返回值。 rewind(文件指针);,北京林业大学 软件教研室,25, fseek函数 fseek函数的功能是将文件指针移动到指定的位置上 fseek(文件指针,偏移量,起始点) 其中,“偏移量”指以“起始点”为基点,向前移动的字节数。 “起始点”可以是文件开始、文件当前位置、文件末尾3种,如表所示。,北京林业大学 软件教研室,26,例如: fseek(fp,100,0); /将位置指针移到离文件头100个字节处 fseek(fp,50,1); /将位置指针移到离当前位置50个字节处 fseek(fp,-10,2); /将位置指针从文件末尾处后退

15、10个字节,北京林业大学 软件教研室,27, ftell函数 ftell函数的功能是返回文件指针的当前读写位置。 这个位置是用相对于文件起始位置的字节偏移量来表示。 ftell(文件指针); 当函数成功调用后则返回文件的当前读写位置,否则返回-1。,北京林业大学 软件教研室,28,10.2 通过文件流进行操作,10.2.1 流类库概述 输入和输出是数据传送的过程,数据像流水一样从一处流向另一处,C+中形象地将此过程称之为流(stream)。 在C+中输入输出流被定义为类,称为流类。 用流类定义的对象称为流对象。 如cin和cout并不是C+所提供的语句,而是iostream类的对象。,北京林业

16、大学 软件教研室,29,在C+中,可以将文件定义为文件流类的一个对象,要进行文件的输入/输出,必须: 先创建一个文件流对象,并与指定的文件关联,即打开文件; 然后才能进行读写操作; 完成后再关闭这个文件。 这就是在C+中进行文件读写的基本过程。,北京林业大学 软件教研室,30,在C+中提供的文件流类包括ofstream、ifstream、fstream,这三个类的定义在C+系统提供的fstream.h文件中; 因此,在程序中使用三个类的对象对文件进行操作时,需要在程序中嵌入fstream.h头文件。 这些文件流类在C+流类库中的继承派生的层次关系如图所示。,北京林业大学 软件教研室,31,10.2.2 打开文件,使用函数open()可以打开文件,其函数原型为: void open(const unsigned char *filename,int mode,int access); filename是一个字符型指针,它指定了要打开的文件名; mode指定了

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号