文件的逻辑结构 文件的存储结构 文件是记录的汇集 ■当一个文件的各个记录按照某种次序 顺序结构——顺序文件 排列起来时,各纪录间就自然地形成 了一种线性关系。 计算寻址结构——散列文件 因而,文件可看成是一种线性结 带索引的结构——带索引文件 构 张够 文件上的操作 C++的流文件 ■检索:在文件中寻找满足一定条件的记录 C++程序员对随机访问文件的逻辑视图 ■修改:是指对记录中某些数据值进行修改。若 是 的字节流,即字节数组 对关键码值进行修改,这相当于删除加插入 序员需要管理标志文件当前位置的文 ■插入:向文件中增加一个新记录 删除:从文件中删去一个记录。 符符本文件操作,都是统文 排序:对指定好的数据项,按其值的大小把文 文件指针设置到指定位置(移动文件指 件中的记录排成序列,较常用的是按关键码值 的排序 从文件的当前位置读取字节 ■向文件中的当前位置写入字节 张幅写 C十十操作二进制文件 的常用方式— fstream类 fstream类的主要函数成员 stream类提供函数操作可随机 #include<fstream. h>//fstream=ifstreamtofstream 访问的磁盘文件中的信息。 /打开文件进行处理。 stream类的主要成员函数包括 /模式示例:ios:: in ios: binary open, close, read, write, void fstream:: open char* name, openmode mode) seekg, seekp. ∥处理结束后关闭文件。 void fstream: close:
6 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 31 文件的逻辑结构 文件是记录的汇集 当一个文件的各个记录按照某种次序 排列起来时,各纪录间就自然地形成 了一种线性关系。 因而,文件可看成是一种线性结 构。 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 32 文件的存储结构 顺序结构——顺序文件 计算寻址结构——散列文件 带索引的结构——带索引文件 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 33 文件上的操作 检索:在文件中寻找满足一定条件的记录 修改:是指对记录中某些数据值进行修改。若 对关键码值进行修改,这相当于删除加插入。 插入:向文件中增加一个新记录。 删除:从文件中删去一个记录 。 排序 :对指定好的数据项,按其值的大小把文 件中的记录排成序列,较常用的是按关键码值 的排序。 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 34 C++的流文件 C++程序员对随机访问文件的逻辑视图 是一个单一的字节流,即字节数组。 程序员需要管理标志文件当前位置的文 件指针。 常见的三个基本文件操作,都是围绕文 件指针进行的: 把文件指针设置到指定位置(移动文件指 针) 从文件的当前位置读取字节 向文件中的当前位置写入字节 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 35 C++操作二进制文件 的常用方式——fstream类 fstream类提供函数操作可随机 访问的磁盘文件中的信息。 fstream类的主要成员函数包括 open,close,read,write, seekg,seekp。 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 36 fstream类的主要函数成员 #include<fstream.h>//fstream=ifstream+ofstream // 打开文件进行处理。 // 模式示例: ios::in | ios::binary void fstream::open(char* name, openmode mode); // 处理结束后关闭文件。 void fstream::close();
ftrean类的主要函数 成员(续1) ftrean类的主要函数成员(续2) ∥/从文件当前位置读入一些字节。 sekg和 seekp:在文件中移动当前位置, ∥/随蓍字节的读入,文件当前位置向前移动。 ∥这样就可以在文件中的任何一个位置 ∥读出或写入字节 fstream::read(char* ptr, int numbytes ∥实际上有两个当前位置 ∥-个用于读出,另一个用于写入 //向文件当前位置写入一些字节 ∥函数sekg用于改变读出位置, /(盖已经在这些位置的字节)。 ∥函数 seekp用于改变写入位量 /随着字节的写入,文件当前位置向前移动 fstream: seekg( int pos);//处理输入 fstream:: write(char* ptr, int numbtyes): fstream: seekp int pos);//处理输出 a istream: seekp(int pos, ios::end); 84缓冲区和缓冲池 缓冲 ○基本概念 目的:减少磁盘访问次数的 ○替换缓冲区的策略 方法:缓冲( buffering)或缓存 虚拟存储 caching 在内存中保留尽可能多的块 可以增加待访问的块已经在内存中的 机会 北大敏息 张幅写 缓冲区和缓冲池 替换缓冲区块的策略 ■存储在一个缓冲区中的信息经常 称为一页(page),往往是一次 新的页块申请缓冲区时,把最近 I/O的量 最不可能被再次引用的缓冲区释 放来存放新页 缓冲区合起来称为缓冲池( buffer ■“先进先出”(FIFO) pool ■“最不频繁使用”(LFU) ■“最近最少使用”(LRU
7 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 37 ftream类的主要函数 成员(续1) // 从文件当前位置读入一些字节。 // 随着字节的读入,文件当前位置向前移动。 fstream::read(char* ptr, int numbytes); // 向文件当前位置写入一些字节 // (覆盖已经在这些位置的字节)。 // 随着字节的写入,文件当前位置向前移动。 fstream::write(char* ptr, int numbtyes); 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 38 ftream类的主要函数成员(续2) // seekg和seekp:在文件中移动当前位置, // 这样就可以在文件中的任何一个位置 // 读出或写入字节。 // 实际上有两个当前位置, //一个用于读出,另一个用于写入。 // 函数seekg用于改变读出位置, // 函数seekp用于改变写入位置 fstream::seekg(int pos); // 处理输入 fstream::seekg(int pos, ios::curr); fstream::seekp(int pos); // 处理输出 fstream::seekp(int pos, ios::end); 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 39 8.4缓冲区和缓冲池 基本概念 替换缓冲区的策略 虚拟存储 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 40 缓冲 目的:减少磁盘访问次数的 方法:缓冲( buffering )或缓存 ( caching ) 在内存中保留尽可能多的块 可以增加待访问的块已经在内存中的 机会 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 41 缓冲区和缓冲池 存储在一个缓冲区中的信息经常 称为一页( page ),往往是一次 I/O的量 缓冲区合起来称为缓冲池( buffer pool ) 北京大学信息学院 张铭编写 ©版权所有,转载或翻印必究 Page 42 替换缓冲区块的策略 新的页块申请缓冲区时,把最近 最不可能被再次引用的缓冲区释 放来存放新页 “先进先出”(FIFO) “最不频繁使用”(LFU) “最近最少使用”(LRU)