fopen , fread fwrite 函数读写二进制文件 问题总结
来源:互联网 发布:小语种教育机构知乎 编辑:程序博客网 时间:2024/05/06 09:53
最近在解析 png 数据文件, 发现一个文件操作中容易忽略的问题,问题描述如下:
在使用 fread 读二进制文件(png 图片)的时候, 发现读取到内存中的数据和 二进制文件中的数据不一致, 同样, 在 使用 fwrite 写二进制文件(png 图片)的时候, 发现写入到内存中的数据和 二进制文件中的数据和内存中的数据也不一致。
这个问题头疼了两天, 结果发现了一个很低级的错误。就是在读写二进制文件的时候,必须确保文件的打开形式是以 二进制读写的形式打开的, 即:文件的打开形式必须是 "rb", "wb"要不然,读写数据的时候,就会出现错误。
/*
* 函数说明: 写二进制文件
* 参数描述: _fileName, 文件名称
* _buf, 要写的内存缓冲。
* _bufLen, 内存缓冲的长度
* 返回值: 0, 成功
* -1, 失败
*
*/
int writeFile(const STR* _fileName,void* _buf,int _bufLen)
{
FILE * fp= NULL;
if( NULL == _buf|| _bufLen <= 0 )return (-1);
fp = fopen(_fileName,"wb");// 必须确保是以 二进制写入的形式打开
if( NULL == fp)
{
return (-1);
}
fwrite(_buf, _bufLen, 1, fp);//二进制写
fclose(fp);
fp = NULL;
return 0;
}
/*
* 函数说明: 读二进制文件
* 参数描述: _fileName, 文件名称
* _buf, 读出来的数据存放位置
* _bufLen, 数据的长度信息
* 返回值: 0, 成功
* -1, 失败
*
*/
int readFile(constchar* _fileName,void* _buf,int _bufLen)
{
FILE* fp= NULL;
if( NULL == _buf|| _bufLen <= 0 )return (-1);
fp = fopen(_fileName,"rb");// 必须确保是以二进制读取的形式打开
if( NULL == fp)
{
return (-1);
}
fread(_buf, _bufLen, 1, fp);// 二进制读
fclose(fp);
return 0;
}
函数使用说明:
- fopen , fread fwrite 函数读写二进制文件 问题总结
- fopen , fread fwrite 函数读写二进制文件 问题总结
- fopen , fread fwrite 函数读写二进制文件 问题总结
- 关于二进制文件fread、fwrite函数使用读写
- fopen()、fwrite()、fread()函数
- 函数名称: fopen、fread、fwrite
- c 函数fopen,fwrite,fread
- c 函数fopen,fwrite,fread
- fopen fwrite fread 问题小记
- C语言进行二进制文件的读写操作(fopen,fwrite,fread)
- C语言读写文件 -fopen、fread、fwrite
- Linux下用C语言fopen、fread和fwrite函数对二进制文件的操作
- fopen函数和fread函数、fwrite函数
- fopen函数和fread函数、fwrite函数
- fopen函数和fread函数、fwrite函数
- fopen函数和fread函数、fwrite函数
- c 函数fopen,fwrite,fread,fgets,fputs
- linux fopen fread fwrite函数分析
- Fragment生命周期的思考
- Leetcode--No.268--Missing Number
- 从UDP的”连接性”说起–告知你不为人知的UDP
- <DatePicker><TimePicker>选择时间和日期
- 欢迎使用CSDN-markdown编辑器
- fopen , fread fwrite 函数读写二进制文件 问题总结
- springboot tomcat8 duplicate springSecurityFilterChain and increasing the maximum size of the cache
- 一个同学的ajax学习经验,值得借鉴
- CDD注释[Ubuntu系统]
- 经验:修复又系统启动(win10和ubuntu16.04)
- JSP内置对象
- LeetCode-1 Two Sum
- Android MAT 工具使用
- ISO-OSI的七层协议经典架构