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)
上一篇 2022年6月5日 下午4:46
下一篇 2022年6月5日 下午4:46


相关推荐

  • Hadoop生态系统全面介绍

    Hadoop生态系统全面介绍Hadoop 作为大数据的分布式计算框架 发展到今天已经建立起了很完善的生态 本文将一一介绍基于 Hadoop 生态的一系列框架和组件 Flume 简介 Flume 是一个分布式 高可用的服务 用于高效收集 聚合和移动大量日志数据 作用 Flume 主要承载的作用是收集各个数据源的事件或日志数据 然后将其 Sink 到数据库架构 Flume 的实现架构原理也非常简单 通过 Agent 代理来实现数据的收集 一个 Agent 包含了 Source channel Sink 三个组件 Source 采集的数据来源

    2025年8月22日
    5
  • jar中没有主清单属性【解决办法】

    jar中没有主清单属性【解决办法】在 pom 文件中 添加如下即可 lt plugin gt lt groupId gt org apache maven plugins lt groupId gt lt artifactId gt maven compiler plugin lt artifactId gt

    2026年3月19日
    2
  • 信号处理之父_信息与信号处理

    信号处理之父_信息与信号处理一、DFT之前言部分由于matlab已提供了内部函数来计算DFT、IDFT,我们只需要会调用fft、ifft函数就行;二、函数说明:fft(x):计算N点的DFT。N是序列x的长度,即N=len

    2022年8月6日
    9
  • 红黑树与平衡二叉树的原理和区别

    红黑树与平衡二叉树的原理和区别一 平衡二叉树平衡二叉树或者是空树 或者是具有如下特征的二叉排序树 1 左子树和右子树的深度之差的绝对值不超过 1 2 左子树和右子树也是平衡二叉树 若将二叉树上结点的平衡因子 BalanceFacto BF 定义为该结点左子树和右子树的深度之差 则平衡二叉树上所有结点的平衡因子只可能觅 1 0 和 1 只要二叉树上有一个结点的平衡因子的绝对值大于 1 则该二叉树就是不平衡

    2026年3月26日
    3
  • hexo latex 换行 多行公式 终极解决方案

    hexo latex 换行 多行公式 终极解决方案hexo的LaTeX可算把我给折腾死了。。。问题:多行公式无法显示(hexo-renderer-marked,mathjax)看到网上说是因为渲染引擎把\\渲染成\,然后才交给mathjax渲染公式都说把hexo-renderer-marked换成hexo-renderer-kramed,然后再node_modules/kramed/lib/rules/inline.js里修改escape项,照做了,确实解决了问题,但是却出现了新的问题:复杂公式显示错乱,遂放弃。又看到在node_modules/m

    2022年5月14日
    52
  • top命令输出解释以及load average 详解及排查思路

    top命令输出解释以及load average 详解及排查思路昨天nagios报警warning,没来得及留下报警截图,nagios值设定的值是当1分钟多于15个进程等待,5分钟多于10个,15分钟多于5个则为warning状态当1分钟多于30个进程等待,5分钟多于25个,15分钟多于20个则为critical状态————————————————————-

    2022年7月17日
    24

发表回复

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

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