关于fread和fwrite的问题,挺着急的,大家帮下忙

marsvip 2007-04-05 11:29:59
同志们好:
  我现在要做一个存储信息的文件,然后读出来,按二进制读写,但是有个奇怪的问题,请大家帮我解决一下。写文件的日志没有出现错误,看文件记录的开头和结尾的消息也对,但是在读的时候,总是读到某一条的时候read出来的length总是0,feeoer没有错误,也不是文件尾,但是就是读不出来了,总是0……下边是我的代码,请大家帮我想一下,我应该没有弄错阿。
这里是写的地方:
我先把buffer的长度作为int写到文件中,然后接着写buffer
fp = fopen(filepath,"w");//这个是打开文件

//这个是写文件函数
int serialSize = buffer的长度;
fwrite(&serialSize,sizeof( int ), 1,fp);
writeNum = fwrite(buffer,sizeof( char ), serialSize,fp);
if(writeNum == 0)
{

}
else
{

}
//

fp = fopen(filepath,"r");//这个是打开读的时候的文件

//这个是读文件函数
int serialSize = 0;
fread(&serialSize,sizeof( int ), 1,fp);
readNum = fread(buffer,sizeof( char ), serialSize,fp);
if(readNum == 0)
{

}
else
{

}
//

读文件和写文件都是循环来用的,知道读写完关闭文件。

现在问题就是在读的时候循环执行到fread(&serialSize,sizeof( int ), 1,fp)的时候serialSize到某一条就会为0……
我试着写了几个文件,每个文件出现问题的位置不一样,有的是在90条,有的在100条等等。
但是单个文件出现问题的点总是一样的,如果说我写文件的时候出现错误的话,我在每个fwrite我的buffer的时候都会判断writenum是否为0,但是从来没有报错,请各位达人帮忙想想看。谢谢大家了,我挺着急的。
...全文
281 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
marsvip 2007-04-05
  • 打赏
  • 举报
回复
liuhaoran 2007-04-05
  • 打赏
  • 举报
回复
...读写二进制文件应该是fopen(filepath,"wb");和fopen(filepath,"rb");的....你这里修改看看怎么样?
iu_81 2007-04-05
  • 打赏
  • 举报
回复
int serialSize = 0;
====================
int serialSize = 256;试试
marsvip 2007-04-05
  • 打赏
  • 举报
回复
厚道做人,谢谢大家
marsvip 2007-04-05
  • 打赏
  • 举报
回复
果然是,居然忘了这个事,小弟实在够白痴了。给分给分~~
liuyaoyou 2007-04-05
  • 打赏
  • 举报
回复
函数申明: FILE *fopen(char *filename, char *mode)
函数用途: 打开一个文件
头 文 件: stdio.h
输入参数: filename: 文件名称
mode:打开模式,含义具体如下:
"r":只读方式打开一个文本文件 "rb": 只读方式打开一个二进制文件
"w":只写方式打开一个文本文件 "wb": 只写方式打开一个二进制文件
"a":追加方式打开一个文本文件 "ab": 追加方式打开一个二进制文件

"r+":可读可写方式打开一个文本文件 "rb+": 可读可写方式打开一个二进制文件
"w+":可读可写方式创建一个文本文件 "wb+": 可读可写方式生成一个二进制文件
"a+":可读可写追加方式打开一个文本文件 "ab+": 可读可写方式追加一个二进制文件

应该是你以文本文件打开,遇到0x0D(回车)这种控制符时读不出来的问题吧。
改成fopen(filename, "rb")和fopen(filename, "wb")或者只用fopen(filename, "rb+")。
不想低调 2007-04-05
  • 打赏
  • 举报
回复
mark

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧