当前位置: 首页 > news >正文

C++:fstream类中seekg()/seekp()与tellg()/tellp()的用法详解

            <div id="content_views" class="htmledit_views"><p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px; font-family:Arial; font-size:14px"> 对输入流操作:seekg()与tellg()<br> 对输出流操作:seekp()与tellp()<br> 下面以输入流函数为例介绍用法:<br> seekg()是对输入文件定位,它有两个参数:第一个参数是偏移量,第二个参数是基地址。<br> 对于第一个参数,可以是正负数值,正的表示向后偏移,负的表示向前偏移。而第二个参数可以是:<br> ios::beg:表示输入流的开始位置<br> ios::cur:表示输入流的当前位置<br> ios::end:表示输入流的结束位置<br> tellg()函数不需要带参数,它返回当前定位指针的位置,也代表着输入流的大小。<br> <br> 假设文件test。txt为以下内容:<br> hello,my world<br> name:hehonghua<br> date:20090902<br> 程序为:<br> #include &lt;iostream&gt;<br> #include &lt;fstream&gt;<br> #include &lt;assert.h&gt;<br> using namespace std;<br> int main()<br> {<br> &nbsp;&nbsp;&nbsp; ifstream in("test.txt");<br> &nbsp;&nbsp;&nbsp; assert(in);<br> &nbsp;&nbsp;&nbsp; in.seekg(0,ios::end);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //基地址为文件结束处,偏移地址为0,于是指针定位在文件结束处<br> &nbsp;&nbsp;&nbsp; streampos sp=in.tellg(); //sp为定位指针,因为它在文件结束处,所以也就是文件的大小<br> &nbsp;&nbsp;&nbsp; cout&lt;&lt;"filesize:"&lt;&lt;endl&lt;&lt;sp&lt;&lt;endl;<br> <br> &nbsp;&nbsp;&nbsp; in.seekg(-sp/3,ios::end); //基地址为文件末,偏移地址为负,于是向前移动sp/3个字节<br> &nbsp;&nbsp;&nbsp; streampos sp2=in.tellg();<br> &nbsp;&nbsp;&nbsp; cout&lt;&lt;"from file topoint:"&lt;&lt;endl&lt;&lt;sp2&lt;&lt;endl;<br> <br> &nbsp;&nbsp;&nbsp;in.seekg(0,ios::beg);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //基地址为文件头,偏移量为0,于是定位在文件头<br> &nbsp;&nbsp;&nbsp;cout&lt;&lt;in.rdbuf();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//从头读出文件内容<br> &nbsp;&nbsp;&nbsp; in.seekg(sp2);<br> <br> &nbsp;&nbsp;&nbsp; cout&lt;&lt;in.rdbuf()&lt;&lt;endl; //从sp2开始读出文件内容<br> <br> &nbsp;&nbsp;&nbsp; return 0;<br> }<br> 则结果输出:<br> file size:<br> 45<br> from file to point:<br> 30<br> hello,my world<br> name:hehonghua<br> date:20090902<br> date:20090902</p> 

相关文章:

  • 等保测评中的密码学应用分析
  • 基于CentOS7上安装MicroK8s(最小生产的 Kubernetes)
  • uni-app - - - - -vue3使用i18n配置国际化语言
  • Qt系统相关——事件
  • 东华大学《2020年+2022年824自动控制原理真题》 (完整版)
  • 【Android】页面启动耗时统计流程梳理
  • Git从了解到操作
  • JavaEE: 深入探索TCP网络编程的奇妙世界(二)
  • 建立队列,插入队列,删除队列
  • scrapy之setting文件详解
  • 0基础学习PyTorch——时尚分类(Fashion MNIST)训练和推理
  • 阿里云函数计算 x NVIDIA 加速企业 AI 应用落地
  • 10.Lab Nine —— file system-上
  • 丹摩智算(damodel)部署stable diffusion实验
  • 三子棋小游戏
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【剑指offer】让抽象问题具体化
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • AngularJS指令开发(1)——参数详解
  • Koa2 之文件上传下载
  • Linux CTF 逆向入门
  • Map集合、散列表、红黑树介绍
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • MySQL的数据类型
  • scala基础语法(二)
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Vue实战(四)登录/注册页的实现
  • 给初学者:JavaScript 中数组操作注意点
  • 机器学习中为什么要做归一化normalization
  • 力扣(LeetCode)22
  • 设计模式(12)迭代器模式(讲解+应用)
  • 实现简单的正则表达式引擎
  • 手机端车牌号码键盘的vue组件
  • 原生js练习题---第五课
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​水经微图Web1.5.0版即将上线
  • #VERDI# 关于如何查看FSM状态机的方法
  • #预处理和函数的对比以及条件编译
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (2)Java 简介
  • (二)Eureka服务搭建,服务注册,服务发现
  • (离散数学)逻辑连接词
  • (循环依赖问题)学习spring的第九天
  • (杂交版)植物大战僵尸
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • .Family_物联网
  • .gitignore文件使用
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • /bin、/sbin、/usr/bin、/usr/sbin
  • /bin/bash^M: bad interpreter: No such file or directory
  • @Conditional注解详解