首页 > 后端开发 > C++ > 正文

C++如何使用seekg和seekp实现随机访问

P粉602998670
发布: 2025-09-07 10:30:02
原创
271人浏览过
seekg用于设置输入流读取位置,seekp用于设置输出流写入位置;两者均支持绝对定位和相对偏移,实现文件随机访问。

c++如何使用seekg和seekp实现随机访问

在C++中,seekgseekp 是用于实现文件随机访问的关键函数,分别用于控制输入流的读取位置(get指针)和输出流的写入位置(put指针)。通过这两个函数,可以在文件中任意跳转读写位置,实现非顺序的随机访问。

seekg:设置输入流的读取位置

seekg 用于输入文件流(如 ifstream 或 fstream),用来移动文件读取指针到指定位置。

函数原型有两种形式:

  • seekg(pos):将读指针移动到文件中绝对位置 pos(从文件开头算起,pos 从0开始)。
  • seekg(off, dir):将读指针从方向 dir 偏移 off 字节。dir 可以是:
    • ios::beg(文件开头)
    • ios::cur(当前位置)
    • ios::end(文件末尾)

示例:

问小白
问小白

免费使用DeepSeek满血版

问小白 5331
查看详情 问小白

立即学习C++免费学习笔记(深入)”;

ifstream file("data.txt", ios::binary);
file.seekg(10); // 跳到第10个字节处
file.seekg(5, ios::cur); // 从当前位置向后移动5字节
file.seekg(-10, ios::end); // 从文件末尾向前移动10字节

seekp:设置输出流的写入位置

seekp 用于输出文件流(如 ofstream 或 fstream),用来移动文件写入指针。

用法与 seekg 完全相同:

  • seekp(pos):跳转到绝对位置 pos。
  • seekp(off, dir):相对 dir 偏移 off 字节。

示例:

立即学习C++免费学习笔记(深入)”;

ofstream file("data.txt", ios::binary);
file.seekp(20); // 移动写指针到第20字节
file file.seekp(-5, ios::cur); // 向前移动5字节重新写

结合 tellg 和 tellp 获取当前位置

在随机访问中,通常配合 tellg()tellp() 使用,分别返回当前读写指针的位置。

例如:

ifstream in("data.txt");
streampos pos = in.tellg(); // 记录当前位置
in.seekg(0, ios::end); // 跳到末尾
streampos size = in.tellg(); // 获取文件大小
in.seekg(pos); // 回到之前位置

实际应用:读写二进制文件中的特定记录

假设有一个结构体记录,存储在二进制文件中:

struct Student {
char name[20];
int age;
};

fstream file("students.dat", ios::in | ios::out | ios::binary);
int index = 3; // 想修改第3个学生
file.seekg(index sizeof(Student)); // 跳到第3个记录
Student s;
file.read(reinterpret_cast<char
>(&s), sizeof(Student));

s.age = 25;
file.seekp(index sizeof(Student)); // 回到同一位置写入
file.write(reinterpret_cast<const char
>(&s), sizeof(Student));

这样就能高效地修改指定位置的数据,而无需读取整个文件。

基本上就这些。只要打开文件时使用 binary 模式,并合理使用 seekg、seekp 配合 tellg/tellp,就能灵活实现文件的随机访问。注意检查文件是否打开成功,以及操作后是否发生错误(可用 file.good() 判断)。

以上就是C++如何使用seekg和seekp实现随机访问的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号