c++文件操作(3)-- 随机读取

随机读取

文件指针 

在文件中有一个文件指针。 我们通过控制文件指针的位置,来实现随机读取文件中的数据。文件指针在哪我们就从文件的哪个位置开始读取数据。

 

seekg();  // 用于设置文件指针的位置。

通过传入两个参数来实现位置设置,第一个参数距离相应位置的偏移字节数 

                                                         第二个参数 相对位置  

相对位置: 一般使用三个。 

ios::beg表示相对于文件的开头位置
ios::cur相对于文件指针所在的当前位置
ios:end相对于文件的尾部位置

偏移字节数: 正数:向右偏移(文件结尾处),   负数:向左偏移(文件开始处)

注意:  偏移字节数,尽量不要太大,超出文件的范围(尤其是用负数的时候)。 

int main(void) {ifstream io;string data;io.open("data.txt");if (!io.is_open()) return 1;// 设置文件指针的位置io.seekg(-10,ios::end); // 将文件指针设置为距离文件结尾10个字节的位置// 这时候我们读取文件中的数据,就是从距离文件末尾10字节的位置读取数据getline(io, data);cout << data << endl;system("pause");return 0;
}

读取结果: 

 

上面使用的负数,表示将文件指针设置到距离文件末尾10个字节的位置,这样我们读取文件就从这个位置开始读取数据。 (其它的设置也是同理)

 

tellg();  // 此函数返回文件指针当前所在的位置距离文件开头多少个字节。

这个函数常用的一个场景是:返回文件的大小。  (和seekg()结合)

 我们可以通过seekg()先将文件指针移动到文件末尾,然后再通过tellg()返回指针到文件开头的字节大小,这样就能会的文件的大小了。

int main(void) {ifstream io;io.open("data.txt");if (!io.is_open()) return 1;// 设置文件指针的位置io.seekg(0,ios::end); // 将文件指针移动到距离文件末尾0个字节的位置,也就是文件末尾// 返回文件指针到文件开头的字节数(获取文件的大小)int count = io.tellg();cout << count << endl;   // 20个字节system("pause");return 0;
}

 

上面两个都是在读取文件数据的时候进行文件指针的偏移。 

 

seekp()  // 用于控制输出流,也就是写文件时候,将文件指针移动到相应的位置,在这个位置写数据

使用一个例子说明: 我们在文件中写 “123456” 。 然后控制文件指针,在数据的中间输入ABC。

int main(void) {ofstream io;io.open("data.txt");if (!io.is_open()) return 1;io << "123456";// 设置文件指针的位置io.seekp(4,ios::beg); // 在输入文件的时候,将指针移动到距离文件开头4个字节的位置。// 然后在文件指针的位置写入数据io << "ABC";system("pause");return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/427662.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pycharm安装过程

1、安装包官网下载 PyCharm: the Python IDE for Professional Developers by JetBrains 点击下载 下拉选择社区版本 选择下载 下载完成后&#xff0c;双击exe安装。 安装完成&#xff0c;生成的桌面快捷方式 同意并继续 进入开发界面

JAVA 学习 面试(八)集合类

集合类 集合&#xff08;Collection&#xff09; 1、 List列表 &#xff1a; 有序 可重复 1、ArrayList : 数组列表 &#xff0c;内部是通过Array实现&#xff0c;对数据列表进行插入、删除操作时都需要对数组进行拷贝并重排序&#xff0c;因此在知道存储数据量时&#xff0c…

2023蓝帽杯初赛取证

排名&#xff1a;37 取证检材容器密码&#xff1a;Hpp^VFQ6bdWYKMjXgUPG#hHxw!jM9 案件详情 2021年5月&#xff0c;公安机关侦破了一起投资理财诈骗类案件&#xff0c;受害人陈昊民向公安机关报案称其在微信上认识一名昵称为yang88的网友&#xff0c;在其诱导下通过一款名为维…

TensorRT英伟达官方示例解析(一)

系列文章目录 TensorRT英伟达官方示例解析&#xff08;一&#xff09; TensorRT英伟达官方示例解析&#xff08;二&#xff09; TensorRT英伟达官方示例解析&#xff08;三&#xff09; 文章目录 系列文章目录前言一、参考资料二、配置系统环境三、00-MNISTData四、01-SimpleD…

了解HTTP/1.1、HTTP/1.0 和 HTTP/2.0

HTTP/1.1、HTTP/1.0 和 HTTP/2.0 是超文本传输协议&#xff08;HTTP&#xff09;的三个主要版本 先解释一下什么是超文本协议 超文本传输协议&#xff08;HyperText Transfer Protocol&#xff0c;简称 HTTP&#xff09;是互联网上应用最广泛的一种网络协议。设计 HTTP 的初衷是…

如何在Windows 10/11中设置IPv4?这里有详细步骤

在Windows上&#xff0c;路由器的动态主机配置协议&#xff08;DHCP&#xff09;服务器&#xff08;通常&#xff09;负责将动态传输控制协议/互联网协议&#xff08;TCP/IP&#xff09;配置分配给网络中的每个设备&#xff0c;包括运行Windows 11或Windows 10的计算机。 尽管…

基于Springboot的大学生心理健康管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的大学生心理健康管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体…

c++:类和对象(5),运算符重载

目录 运算符重载概念&#xff1a; 运算符重载 1.成员函数重载号 2.全局函数重载号 打印结果&#xff1a; <<运算符重载 递增运算符重载 简单例子 输出结果为&#xff1a; 赋值运算符重载 如何重载 输出结果为&#xff1a; 什么时候重载 关系运算符重载 简单例…

基于Java SSM框架实现医院预约挂号系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现医院预约挂号系统演示 JSP技术介绍 JSP技术本身是一种脚本语言&#xff0c;但它的功能是十分强大的&#xff0c;因为它可以使用所有的JAVA类。当它与JavaBeans 类进行结合时&#xff0c;它可以使显示逻辑和内容分开&#xff0c;这就极大的方便了用户的需…

.git 文件夹结构解析

.git 文件夹结构解析 在这篇文章就让我们来看看这个 Git 仓库里的文件分别都是用来干什么的&#xff0c;以及在执行了相关的 Git 命令后这些文件会如何响应。 hooks&#xff08;钩&#xff09;&#xff1a;存放一些shell脚本info&#xff1a;存放仓库的一些信息logs&#xff…

JAVA文件操作IO流(一)

File 文件对象 文件 在计算机中&#xff0c;文件是非常重要的存储方式&#xff0c;JAVA的标准库java.io提供了File对象来操作文件和目录。要构建一个File对象&#xff0c;需要通过构建方法&#xff0c;传入该文件的本地物理路径。 例如&#xff1a; 获取文件对象的1.绝对路径…

51单片机8*8点阵屏

8*8点阵屏 8*8点阵屏是一种LED显示屏&#xff0c;它由8行和8列的LED灯组成。每个LED灯的开闭状态都可以独立控制&#xff0c;从而可以显示出数字、字母、符号、图形等信息。 8*8点阵屏的原理是通过行列扫描的方式&#xff0c;控制LED灯的亮灭&#xff0c;从而显示出所需的图案或…