seekg()与tellg()用法详解

seekg()与tellg()用法详解对输入流操作:seekg()与tellg()对输出流操作:seekp()与tellp()下面以输入流函数为例介绍用法:seekg()是对输入文件定位,它有两个参数:第一个参数是偏移量,第二个参数是基地址。对于第一个参数,可以是正负数值,正的表示向后偏移,负的表示向前偏移。而第二个参数可以是:ios::beg:表示输入流的开始位置ios::cur:表示输入流的当前位置ios::end:表示输入流的结束位置tellg()函数不需要带参数,它返回当前定位指针的位置,也代表着输入流的大小。假设

大家好,又见面了,我是你们的朋友全栈君。

对输入流操作:seekg()与tellg()
对输出流操作:seekp()与tellp()

下面以输入流函数为例介绍用法:
seekg()是对输入文件定位,它有两个参数:第一个参数是偏移量,第二个参数是基地址。
对于第一个参数,可以是正负数值,正的表示向后偏移,负的表示向前偏移。而第二个参数可以是:

  • ios::beg:表示输入流的开始位置
  • ios::cur:表示输入流的当前位置
  • ios::end:表示输入流的结束位置

tellg()函数不需要带参数,它返回当前定位指针的位置,也代表着输入流的大小。

假设文件test。txt为以下内容:

hello,my world
name:hehonghua
date:20090902

程序为:

#include <iostream>
#include <fstream>
#include <assert.h>

using namespace std;
int main()
{
    ifstream in("test.txt");
    assert(in);
   
    in.seekg(0,ios::end);       //基地址为文件结束处,偏移地址为0,于是指针定位在文件结束处
    streampos sp=in.tellg();  //sp为定位指针,因为它在文件结束处,所以也就是文件的大小
    cout<<"file size:"<<endl<<sp<<endl;

    in.seekg(-sp/3,ios::end);  //基地址为文件末,偏移地址为负,于是向前移动sp/3个字节
    streampos sp2=in.tellg();
    cout<<"from file to point:"<<endl<<sp2<<endl;

    in.seekg(0,ios::beg);        //基地址为文件头,偏移量为0,于是定位在文件头
    cout<<in.rdbuf();             //从头读出文件内容
    in.seekg(sp2);

    cout<<in.rdbuf()<<endl; //从sp2开始读出文件内容

    return 0;
}

则结果输出:

file size:
45
from file to point:
30
hello,my world
name:hehonghua
date:20090902

date:20090902

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135200.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • VS Code 迎来新对手?JetBrains发布新一代轻量编辑器——Fleet

    VS Code 迎来新对手?JetBrains发布新一代轻量编辑器——Fleet11月29日,Jetbrains官网发布一个重大消息,即公布了一个轻量级编辑器——Fleet。????https://www.jetbrains.com/zh-cn/fleet/Fleet作为一个功能齐全的编辑器启动,具有语法高亮显示、简单的代码补全,以及用户对一个编辑器期待的所有功能,比如智能补全、重构、导航、调试等功能。话不多说,下面让我们了解一下Fleet新功能吧。Fleet适用于多种场景和多类编程语言JetBrains官方认为开发者通常在不同的项目中会使用到不同的技术,有时在单个项目

    2022年6月11日
  • MongoDB高级操作(管道聚合)

    MongoDB高级操作(管道聚合)一、 聚合aggregate聚合(aggerate)主要用于计算数据,类似于SQL中的sum(),avg(),聚合aggregate是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。方法:db.stu.aggergate({管道:{表达式}}),如图:二、管道(grep)在Mon…

    2022年10月24日
  • vim 设置搜索高亮_vim取消搜索后高亮持续

    vim 设置搜索高亮_vim取消搜索后高亮持续高亮有两种方法1)临时高亮vimfile文件输入:sethlsearch2)永久高亮vim~/.vimrc文件中添加sethlsearch取消搜索高亮:setnohlsearch或者简写的:noh

    2022年9月23日
  • 最全的js正则表达式用法大全_js正则表达式语法大全

    最全的js正则表达式用法大全_js正则表达式语法大全匹配中文字符的正则表达式:[u4e00-u9fa5]评注:匹配中文还真是个头疼的事,有了这个表达式就好办了匹配双字节字符(包括汉字在内):[^x00-xff]评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)匹配空白行的正则表达式:ns*r评注:可以用来删除空白行匹配HTML标记的正则表达式:]*>.*?|评注:网上流

    2022年11月2日
  • 完全理解icmp协议

    完全理解icmp协议1.ICMP出现的原因在IP通信中,经常有数据包到达不了对方的情况。原因是,在通信途中的某处的一个路由器由于不能处理所有的数据包,就将数据包一个一个丢弃了。或者,虽然到达了对方,但是由于搞错了端口号,服务器软件可能不能接受它。这时,在错误发生的现场,为了联络而飞过来的信鸽就是ICMP报文。在IP网络上,由于数据包被丢弃等原因,为了控制将必要的信息传递给发信方。ICMP协议是为了辅助IP…

    2022年7月12日
  • 苹果充电器怎么辨别真假_9款热门充电器盘点:苹果、Anker、紫米、小米、锤子,谁更值得买…[通俗易懂]

    本文作者:基围虾GeekUp由于把玩各种设备,并且狂热追求快充,所以手里更新了一堆充电器,今天就来跟大家聊聊我手里的这些充电器们。从功率来排的话,目前我手上有以下充电器。1,苹果五福一安买手机手表送的,家里屯了一堆了,一个都没用上。2,锤子18W买R1之前收了一套,有了R1又多了一套,小夜灯牛逼,配合C2L线无敌。3,小米QC3.0随小米手机附送的头,QC3.0,没啥。4,Anker3…

    2022年4月9日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号