使用ifstream的一般步骤:

ifstream ifs;ifs.open(".\\..\\..\\resources\\out_800_600_25.rgba", ios::binary);if (!ifs){cout << "文件打开失败" << endl;return 0;}int size = 800 * 600 * 4;unsigned char* rgba = new unsigned char[size];int read_size = 0;while (!ifs.eof()){ifs.read((char*)rgba, size);read_size += size;}cout << " read :" << read_size << endl;

这里有一个大坑!!!!,eof中的方法是判断到达了文件结束符EOF,EOF是最后一个字符的下一个字符,所以经常可能会多读一次。
解决方法是在读取后,再判断下一个字符是否是EOF,这里判断下一个字符使用peek(),peek()不会移动文件指针位置。
所以正确使用eof的方式为:

ifstream ifs;ifs.open(".\\..\\..\\resources\\out_800_600_25.rgba", ios::binary);if (!ifs){cout << "文件打开失败" << endl;return 0;}int size = 800 * 600 * 4;unsigned char* rgba = new unsigned char[size];int read_size = 0;while (!ifs.eof()){ifs.read((char*)rgba, size);read_size += size;if (ifs.peek() == EOF) break;}cout << " read :" << read_size << endl;

注意这里加了
if (ifs.peek() == EOF) break;

c++ ifstream中的eof()方法相关推荐

  1. python使用方法-在Python中使用next()方法操作文件的教程

    next()方法当一个文件被用作迭代器,典型例子是在一个循环中被使用,next()方法被反复调用.此方法返回下一个输入行,或引发StopIteration异常EOF时被命中. 与其它文件的方法,如Re ...

  2. python脚本怎么使用_在Python中使用next()方法操作文件的教程

    next()方法当一个文件被用作迭代器,典型例子是在一个循环中被使用,next()方法被反复调用.此方法返回下一个输入行,或引发StopIteration异常EOF时被命中. 与其它文件的方法,如Re ...

  3. python中的eof错误_python – 解析器YACC中的EOF错误

    我试图使用PLY库中为Python提供的yacc解析器来解析字符串. 解析器本身很长,但我遇到的问题是它总是给我同样的错误,无论我放什么样的字符串. 错误是这样的: yacc:输入中的解析错误. EO ...

  4. VS2013在MFC中使用ADO方法操作Access2013数据库

    1. 首先创建一个基于对话框的MFC应用程序ADO_ACCESS.sln.然后在stdafx.h头文件末尾添加(网上有说在某个#include后面的添加的,也有说在合适位置添加的,我这里直接添加在最末 ...

  5. vue打印props的值_vue中props传值方法

    vue中props传值方法 1.开发环境 vue 2.电脑系统 windows10专业版 3.在使用 vue开发的过程中,我们经常会使用 props进行组件的传值,下面是我的分享,希望对你有所帮助! ...

  6. Javascript中二进制数据处理方法

    Javascript中二进制数据处理方法 转载于:https://www.cnblogs.com/motadou/archive/2012/02/19/2358514.html

  7. HashSet中的add()方法( 五 )(详尽版)

    上接 HashSet中的add()方法( 四 )(详尽版) ,我们再重写一下equals()方法来看看是否可以不能存入相同的id: 在学生类中再重写equals()方法: public class S ...

  8. HashSet中的add()方法( 四 )(详尽版)

    上接 HashSet中的add()方法( 三 )(详尽版) ,我们重写一下Student类中的hashCode()方法来看看是否还能不能添加重复的学号了, 在学生类中重写hashCode()方法: p ...

  9. HashSet中的add()方法( 三 )(详尽版)

    上接HashSet中的add()方法( 二 )(详尽版) ,前两篇说的是泛型为String类的add()方法的具体执行过程,此后三篇说说泛型为自定义类的add()方法的具体执行过程: 首先让我们来自定 ...

最新文章

  1. switch 使用使用小技巧
  2. 笔记本电脑u盘装linux系统,用U盘给Linux笔记本电脑重装Win7/XP系统的图文教程
  3. vrep和matlab,VREP与MATLAB联合仿真程序--UR5机械臂动力学控制
  4. Windows Phone中Wallet钱包的使用
  5. Libra教程之:执行Transactions
  6. 数据结构——图的C语言实现
  7. 利用react native创建一个天气APP
  8. QCC蓝牙芯片PIO操作
  9. apk部分手机安装失败_安装APK文件时提示“解析包出现错误”,看完就知道怎么做了!...
  10. 腾讯实习生招聘失败经历分享
  11. Cocos Creator 开发微信小游戏 打包上线
  12. java 给图片加水印整理:2种方法
  13. Java IO流详解和常用流的使用
  14. Python(x,y)下载安装及基本操作
  15. 关于C++ Boost库的使用
  16. 文末有福利 | 停不下来!程序员在GitHub上开源了一个自制表情包项目
  17. Java多线程下载网图
  18. 外卖小哥莫名成10家公司监事 企业登记存监管漏洞
  19. Moments无法识别人像解决方法
  20. 怎么将PDF图纸转换成CAD图纸

热门文章

  1. java复制数组到数组,Java如何将一个数组元素复制到另一个数组
  2. i12蓝牙耳机充电仓怎么看充满电_蓝牙5.2加持百元价位半入式TWS耳机TrueAir 2体验...
  3. 明日之后多贝雪山服务器在安卓系统叫什么,明日之后多贝雪山NPC坐标点 多贝雪山NPC位置详解...
  4. 24.大数据---Hive的连接三种连接方式
  5. 一、数域与一元多项式——高等代数
  6. 计算几何基础【用图来助你理解几何算法】
  7. vs2019java安装教程_vs2019安装和使用教程(详细)
  8. JESD204接口调试总结——Xilinx JESD204B IP AXI寄存器简介
  9. IntelliJ IDEA中文插件
  10. (六)《数电》——二极管与CMOS门电路(入门)