fread函数的问题?

ljhsoft 2002-03-26 04:28:19
我使用fread函数从文件中读数据,函数如下:
bool __fastcall TICL::Open(AnsiString FileName)
{
if(!FileExists(FileName)) {
#ifdef ICLHDEBUG
MsgBox("文件“"+FileName+"”不存在!",ICO_ERROR);
#endif
return false;
}

FILE * fp;
if((fp=fopen(FileName.c_str(),"r"))==NULL) {
#ifdef ICLHDEBUG
MsgBox("打开文件“"+FileName+"”错误!",ICO_ERROR);
#endif
return false;
}
//文件打开成功
New(FileName);
filename = FileName;
fseek(fp,0,SEEK_SET);
fread((char *)&head,sizeof(ICLHEAD),1,fp);
if(strcmp(head.flag,ICLFLAG)!=0 || head.count>ICONMAX) {
#ifdef ICLHDEBUG
MsgBox("文件“"+FileName+"”类型错误!",ICO_ERROR);
#endif
return false;
}
ICLDATA p;
pBuf.set_length(head.count);
//读取数据到内存
for (int i=0;i<head.count;i++) {
fread((char *)&p,sizeof(ICLDATA),1,fp);
strcpy(pBuf[i].name,p.name);
memcpy(pBuf[i].buf,p.buf,ICONSIZE);
}

fclose(fp);
return fileisopen;
}
//------------------------------------------------------------------------
这句 fread((char *)&head,sizeof(ICLHEAD),1,fp);函数会自动将值为0x0D的字节去掉,只要遇到0x0D将忽略,所以读出来的内容不相同,没有文件中0x0D则正确,有则出现错误,请问这是何解,我将读出来的内容反复比较过,确实如此,那位有什么高见,给我指定一二。谢谢!

...全文
51 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Iambear 2002-05-30
  • 打赏
  • 举报
回复
mark
mjm_d 2002-03-26
  • 打赏
  • 举报
回复
使用二进制方式
同时注意保证你的二进制文件最好使用fwrite写入
cococut 2002-03-26
  • 打赏
  • 举报
回复
用别的方式打开看看!
比如二进制的方式
if((fp=fopen(FileName.c_str(),"rb"))==NULL)
ljhsoft 2002-03-26
  • 打赏
  • 举报
回复
TO black_whole(整个儿黑):
你认为用那个函数较好?
black_whole 2002-03-26
  • 打赏
  • 举报
回复
为何要用fread呢?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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