ifstream seekg 问题

ifstream seekg 问题文件输入流(ifstream)读到文件尾之后,调用seekg重定向读pos类似于以下代码片段://readwholefilewhile(ifs.readline(str,strLen)){std::cout<<line++<<":"<<str<<std::endl;}ifs.seekg(0,std:…

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

文件输入流(ifstream)读到文件尾之后,调用seekg 重定向 读pos

类似于以下代码片段:

//read whole file
while(ifs.readline(str,strLen)){
    std::cout << line++ << " : "<<str<<std::endl;
}



ifs.seekg(0,std::ios::beg);//rewind to beginning of the file //1
ifs.clear();//clear eof flag                                 //2

std::cout <<"+++++++++++++++++++++++++++++++"<<std::endl;
//read whole file again
line = 0;
while(ifs.readline(str,strLen)){//发生错误,不能继续读文件
    std::cout << line++ << " : "<<str<<std::endl;
}

 

发现重新读文件的时候 发生错误,不能继续读文件。

查看seekg的说明之后,发现

ifstream seekg 问题

如果 ifstream 的 eofbit 没有被清除,seekg 会失败。

 

改成如下代码之后,程序正常了。

 

//read whole file
while(ifs.readline(str,strLen)){
    std::cout << line++ << " : "<<str<<std::endl;
}


ifs.clear();//clear eof flag first                                //2
ifs.seekg(0,std::ios::beg);//then rewind to beginning of the file //1


std::cout <<"+++++++++++++++++++++++++++++++"<<std::endl;
//read whole file again
line = 0;
while(ifs.readline(str,strLen)){//发生错误,不能继续读文件
    std::cout << line++ << " : "<<str<<std::endl;
}

 

 

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

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

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


相关推荐

  • wifi2.4频段怎么设置_怎么修改wifi频段

    wifi2.4频段怎么设置_怎么修改wifi频段在win10系统里,wifi一般会优先选择2.4g频段,一些公共wifi大家都挤在2.4g频段的话,会导致网络质量很大的下降,所以我们可以把wifi改成5hz首选频带,那么win10怎样将wifi变为支持5ghz频段呢,下面小编给大家分享win10将wifi改成5hz首选频带的方法。解决方法:1、点击win10操作系统上的开始菜单图标,在弹出的菜单中,点击设置。2、弹出设置窗口,在设置窗口界面中点…

    2022年10月20日
  • navcat 激活码(JetBrains全家桶)

    (navcat 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlMLZPB5EL5Q-eyJsaWNlbnNlSW…

    2022年3月20日
  • 优先级队列的使用[通俗易懂]

    优先级队列的使用[通俗易懂]优先级队列(priorityqueue)中的元素可以按照任意的顺序插入,却总是按照排序的顺序进行检索。也就是说,无论何时调用remove方法,总会获得当前优先级队列中最小的元素.然后,优先级队列并没有对所有的元素进行排序。如果用迭代的方式处理这些元素,并不需要对它们进行排序。优先级队列使用了一个优雅且高效的数据结构,称为堆(heap)。堆事一个可以自我调整的二叉树,对树执行添加(add)和删除(

    2022年9月16日
  • AutoSAR系列讲解 – 总目录

    AutoSAR系列讲解 – 总目录博主想在开始前先讲一下我们的具体安排,这里就以目录加说明的形式展示出来,同时这也可以作为大家学习AutoSAR的参考。由于实践篇需要在很久以后才会更新,所以这里我们先罗列一下理论篇的内容,实践篇等开始更新的时候我再补充上

    2022年7月20日
  • LinkedList基本用法「建议收藏」

    LinkedList基本用法「建议收藏」LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.LinkedList的构造函数如下1.publicLinkedList(): ——生成空的链表2.publicLinkedList(Collectioncol): 复制构造函数1、获取链表的第一个和最后一个元素[java] viewplaincopy

    2022年6月17日
  • HADOOP生态圈简介

    HADOOP生态圈简介1.hadoop生态概况Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。具有可靠、高效、可伸缩的特点。Hadoop的核心是YARN,HDFS和Mapreduce下图是hadoop生态系统,集成spark生态圈。在未来一段时间内,hadoop将于spark共存,hadoop与s…

    2022年5月22日

发表回复

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

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