最近在写一个工具,需要去分段读取日志,由于日志很大(可能10GB+),所以不能一次读到内存中
我发现,当使用"r"/“ios::in”去读取文件的时候,读取完之后,文件指针的位置会比read的buffer要靠后
比如以下代码

inLogFile.open(file, ios::in);
unsigned long long blockSize = 16 * 1024 * 1024;//16MB
char *tempStr = new char[blockSize];
inLogFile.read(tempStr, blockSize);
cout <<" after read postion" << (long long)inLogFile.tellg() << endl;

此时,按照预想,输出的结果应该是
after read postion16777216
但是,实际上输出的可能是:
after read postion17056210
可以看到,实际的文件指针要更靠后,搜索相关资料研究后,发现这个是由于日志文件的格式导致的,如果使用"r"/“ios::in”去读取文件,在windows下,会将换行符从\r\n变成\n,这样实际上的文件指针就更加靠后了
此时,可以使用"rb",或者ios::in|ios::binary来打开文件,这样就不会转换格式

inLogFile.open(file, ios::in|ios::binary);
unsigned long long blockSize = 16 * 1024 * 1024;//16MB
char *tempStr = new char[blockSize];
inLogFile.read(tempStr, blockSize);
cout <<" after read postion" << (long long)inLogFile.tellg() << endl;

此时,输出的结果就和预想的完全一致
after read postion16777216

C++使用ifstream read读文件时读的大小的问题相关推荐

  1. 高并发时,读文件、读SESSION、读缓存(Redis)和读数据库(Mysql)的查询效率哪家强?

    今天我们来探讨下读文件.读SESSION.读缓存(Redis).读数据库(Mysql),四者查询速度大比拼,效率哪家强? 前言:本案例测试环境为本地环境,局域网模式,不同的业务逻辑,会对测试结果产生影 ...

  2. C语言按行读文件与读文件中每一个字符

    这里写自定义目录标题 1.按行读取文件,分别获得文件中的每一行. 2.读取文件中的每一个字符并写入字符串数组. 注意: 1.按行读取文件,分别获得文件中的每一行. char Buffer[100]; ...

  3. 为什么c语言读文件少内容,这个程序为什么在读文件时候读不全数据?

    已结贴√ 问题点数:10 回复次数:7 这个程序为什么在读文件时候读不全数据? txt(数据): 4700.7100     -16.801     73.331    115.494     37. ...

  4. python读文件时如何换行_python读取文件,换行问题

    代码 写法一: with open('./test.txt') as filename: for line in filename: print(line.rstrip()) 写法二: with op ...

  5. c语言读文件时 fgetc,[求助]用fgetc()读取文件时遇到的问题~~

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 文件input.txt Today is sunday. Our beautiful pools had turned brownish          ...

  6. shell读文件时无法读入tab的问题

    最近要写一个脚本,遇到一个比较恶心的地方: cat rcv.date.log | while read line do         echo -e "$line" done 在 ...

  7. 读文件时出现这个错误 'utf-8' codec can't decode byte 0xba in position 21: invalid start byte...

    ''' file2 文件内容: 很任性wheniwasyoung ''' 源代码: f = open("file2",'r',encoding="utf-8") ...

  8. 读文件时,将str数据转换为float 报错ValueError: could not convert string to float: ‘.‘

    将line[1]改为float类型 在查看没有空格等其他字符后,最终发现解决方法为:将line[1]改为line[1:2],问题解决

  9. matlab读int16读文件_matlab读文件

    matlab 文件操作 文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件. MATLAB 提供了一系列低层输入输出函数,专门用于文件操作. 1 .文件的打开与关闭 1 )打开 ...

最新文章

  1. Oracle-11g安装与使用
  2. linux注销、关机、重启
  3. 东芝打印机cd40故障_东芝小尺寸UV平板机介绍
  4. Molecule – 帮助你构建跨平台的 HTML5 游戏
  5. FTP服务器的安装和配置
  6. php开发入门,PHP开发入门教程之面向对象
  7. python 输出 GPU内存 最大使用率
  8. 大学计算机要学什么内容,大学计算机课程学习路线应该是怎么样的呢?
  9. postman 测试excel下载_使用Postman轻松实现接口数据关联
  10. Linux下安装jre
  11. 统计机器学习导论第四章答案
  12. 单元格下拉全选快捷键_excel全选快捷键是什么,excel表格全选快捷键是什么?...
  13. 【高级持续性威胁追踪】当黑客不讲武德,安全专家也容易被骗
  14. STM32标准库与HAL库全系列下载地址
  15. php7 memcached sasl,memcached sasl
  16. 第五人格怎么投屏 轻松玩电脑版手游
  17. 概率图模型(6)马尔科夫随机场
  18. 面试(hardware)
  19. 考研语法整理(简洁版)
  20. python微博涨粉_如何用 Python 让微博热搜榜动起来

热门文章

  1. Win10 Maven安装与配置
  2. 春节家宴必不可少的解腻凉菜【山楂白菜心】
  3. STM32F103(一):ADC
  4. uniapp 录音_H5原生使用录音功能
  5. lisp 提取字符串中的數字_LISP - 字符串
  6. 网页制作经典技巧24条
  7. sdcc编译器使用makefile
  8. 2022年5月远程网络教育大学英语B统考题库试题
  9. 搜狗搜索或成为企鹅号流量入口:腾讯欲实现自己的流量闭环
  10. 微信小程序开发基础(04基础加强)