我有一个二进制文件a.dat做为参数存储文件,里面依次存储了多项数据项;由于不同客户机的参数存储文件版本不同,存储的数据项有多有少,文件大小也就不同。因此在读取每个数据项时,都需要对每个数据项都要判定是否存在,如果不存在,赋默认值。代码如下:
null
if ( !feof( pFile ) )
{
fread( &itemN, sizeof(unsigned char), 1, pFile );
}
else
{
itemN = 0;
}
后来发现,这么写是有问题的:如果文件中只有N-1项,没有第N数据项,也会执行fread( &itemN, sizeof(unsigned char), 1, pFile );,因为在fread成功读取N-1项后,直接调用feof( pFile )不会返回非0值,原因就是在读完最后一个字符后,fp->flag仍然没有被置为_IOEOF,因而feof()仍然没有探测到文件结尾。只有再次调用fread()执行读操作,feof()才能探测到文件结尾。
所以,正确的写法应该是:
fread( &itemN, sizeof(unsigned char), 1, pFile );
if ( feof( pFile ) )
{
itemN = 0;
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容