fread读取大文件以及返回值问题
来源:互联网 发布:关键词排名优化技巧 编辑:程序博客网 时间:2024/06/05 08:10
今天fread文件读取遇到问题,本来很小的一个问题,但是一直没有注意到,导致花了不少时间调试,所以写下来备忘一下。
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );//Parameters/*ptrPointer to a block of memory with a minimum size of (size*count) bytes.sizeSize in bytes of each element to be read.countNumber of elements, each one with a size of size bytes.streamPointer to a FILE object that specifies an input stream.*/
Return Value
The total number of elements successfully read is returned as a size_t object, which is an integral data type.If this number differs from the count parameter, either an error occured or the End Of File was reached.
You can use either ferror or feof to check whether an error happened or the End-of-File was reached.
先复制一段函数定义,这里首先要注意的是函数返回值的,函数返回的是读取的元素个数,注意,不一定是读取的字节数,当且仅当下面的代码时返回的才是读取的字节数
fread(ptr, 1, count, fp);
我今天用fread读文件时遇到的问题是读一个1M左右的文件,总是只读取到前面的一部分,比如
numOfItem = fread(fontDotData, 1, allFontSize, fp);
上面的代码读文件,allFontSize的值是3657728,返回值numOfItem却是10169
理论上numOfItem应该和allFontSize相等的,问题出在哪里了呢?
先看看下面的文件打开:
FILE *fp = fopen(fontFilename, "r");
看出问题没
错误原因: 用文本方式打开了二进制文件
文本方式读取二进制数据, 可能在文件结束之前将某段数据判定为文件末尾EOF, 所以结束读取( 举个例子, 比如遇到 0x00 0x00 0xff 0xff, 则文本方式方式的文件流, 认为已经到文件末尾, 不能读取)
所以应该用二进制方式打开,不会读到一部分就中断了
FILE *fp = fopen(fontFilename, "rb");
- fread读取大文件以及返回值问题
- fread 读取文件问题
- fread 返回值的问题
- linux fread 的返回值问题
- fread读取文件注意
- fread feof 文件尾读取重复的问题
- fread返回值
- fread返回值
- fread读取ASCII编码文件
- fread读取Unicode编码文件
- fread读取文件(二进制文件)
- 在以二进制文件打开方式打开文件的时候,fread返回值判断文件是否结束的问题
- fread返回0或者不是期望的值,那么是否会读取到数据(如果数据没有读完的话),并改变了文件的指针位置?
- fread函数的返回值
- fread函数的返回值
- fread/fwrite 返回值理解
- C中文件读取fread和fwrite 返回值等注意事项
- fread总返回0的问题
- STM32F10XX时钟系统框图及说明
- Android之Menu选项菜单
- MFC(ActiveX编程,孙鑫C++第十八讲笔记整理)
- C++实现单例模式
- 《Effective C++》读书笔记之item40:明智而审慎地使用多重继承
- fread读取大文件以及返回值问题
- 最小堆的实现(C 语言版)
- 把字符串转换成整数
- 常用的正则表达式
- 引入了 struts2-spring-plugins 包后 Spring 就会管理你的 Action
- ARM9 汇编指令总结1
- Blocks的编程应用笔记
- ALM 解决方案之TechExcel DevSuite 评估报告 - 3
- 优化if else 和 switch case 结构