• 全部
  • 问答

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则正确,有则出现错误,请问这是何解,我将读出来的内容反复比较过,确实如此,那位有什么高见,给我指定一二。谢谢!

...全文
13 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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呢?
回复
发帖
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2002-03-26 04:28
社区公告
暂无公告