C++文件的随机访问

来源:互联网 发布:兰州知豆租赁官网 编辑:程序博客网 时间:2024/05/11 21:39

在C++中可以由程序控制文件指针的移动,从而实现文件的随机访问,即可读写流中任意一段内容。

一般文本文件很难准确定位,所以随机访问多用于二进制文件。如【例9.9】中对象中两个字符串是按实际串长存放的,不是按数组元素来存放的,而【例9.10】中是按数组长度来存放的,每个对象数据长度固定,所以便于随机访问。

随机访问指针控制字

在ios类中说明了一个公有枚举类型:
enum seek_dir
{
       beg=0, //文件开头
       cur=1, //文件指针的当前位置
       end=2 //文件结尾
};

设置“输入流指针控制字”的成员函数

设置“输入流指针控制字”的成员函数:
    istream&istream::seekg(streampos); //指针直接定位
    istream&istream::seekg(streamoff, ios::seek_dir); //指针相对定位
    long istream::tellg(); //返回当前指针位置

流的指针位置类型streampos和流的指针偏移类型streamoff定义为长整型,也就是可访问文件的最大长度为4G。例:
    datafile.seekg(-20L,ios::cur);
    //表示将文件定位指针从当前位置向文件头部方向移20个字节。

    datafile.seekg(20L,ios::beg);
    //表示将文件定位指针从文件头向文件尾方向移20个字节。

    datafile.seekg(-20L,ios::end);
    //表示将文件定位指针从文件尾向文件头方向移20个字节。

    tellg()和seekg()往往配合使用。
    //指针不可移到文件头之前或文件尾之后。

设置“输出流指针控制字”的成员函数

设置“输出流指针控制字”的成员函数:
    ostream&ostream::seekp(streampos);
    ostream&ostream::seekp(streamoff,ios::seek_dir);
    long ostream::tellp();
为了便于记忆,函数名中g是get的缩写,而p是put的缩写。对输入输出文件定位指针只有一个但函数有两组,这两组函数功能完全一样。

举例

【例9.11】使用随机访问对【例9.10】进行改造。(查看源码)

原创粉丝点击