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

C++如何使用fstream进行随机访问

P粉602998670
发布: 2025-09-13 12:39:01
原创
1044人浏览过
使用seekg()和seekp()控制读写指针实现随机访问,分别以ios::beg、ios::cur、ios::end为基准定位;2. 定位后用read()或write()读写数据,修改内容会覆盖原位置;3. 通过tellg()和tellp()获取当前指针位置,常用于计算文件大小或记录进度;4. 操作二进制文件时需以ios::binary模式打开,并检查文件是否成功打开。

c++如何使用fstream进行随机访问

在C++中使用

fstream
登录后复制
进行随机访问,关键在于控制文件读写位置指针。通过
seekg()
登录后复制
(用于读取)和
seekp()
登录后复制
(用于写入),可以将指针移动到文件任意位置,实现非顺序的读写操作。

设置文件指针位置

seekg()
登录后复制
seekp()
登录后复制
分别用来设置输入和输出的位置指针。它们接受两个参数:偏移量和基准位置。

常用基准位置包括:

  • ios::beg:从文件开头开始
  • ios::cur:从当前位置开始
  • ios::end:从文件末尾开始

例如:

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

file.seekg(10, ios::beg);  // 移动到第10个字节(从头算起)
file.seekg(-5, ios::end);  // 从末尾往前5个字节
file.seekg(20, ios::cur);  // 当前位置往后20字节
登录后复制

读取指定位置的数据

使用

seekg()
登录后复制
定位后,用
get()
登录后复制
read()
登录后复制
等方法读取数据。

示例:跳过前几个字节,读取中间一段内容

问小白
问小白

免费使用DeepSeek满血版

问小白 5331
查看详情 问小白
fstream file("data.txt", ios::in | ios::binary);
if (file.is_open()) {
    file.seekg(5);  // 跳过前5个字节
    char buffer[10];
    file.read(buffer, sizeof(buffer));
    // 此时buffer包含从第5字节开始的10个字节
}
登录后复制

修改文件中间内容

以读写模式打开文件,定位后直接写入新数据。

注意:写入不会改变文件总长度,只是覆盖原有内容。

fstream file("data.txt", ios::in | ios::out | ios::binary);
if (file.is_open()) {
    file.seekp(10);                    // 定位到第10字节
    file.write("NEW", 3);              // 写入3字节
    file.flush();                      // 确保写入磁盘
}
登录后复制

获取当前指针位置

使用

tellg()
登录后复制
tellp()
登录后复制
可获取当前读/写位置。

常用于记录位置或计算已处理数据量。

file.seekg(0, ios::end);
streampos fileSize = file.tellg();  // 获取文件大小
file.seekg(0);                      // 回到开头
登录后复制

基本上就这些。只要掌握

seekg
登录后复制
seekp
登录后复制
tellg
登录后复制
tellp
登录后复制
的配合使用,就能灵活实现文件的随机访问。操作二进制文件时尤其有用。记得检查文件是否成功打开,并注意文本模式与二进制模式的区别

以上就是C++如何使用fstream进行随机访问的详细内容,更多请关注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号