首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++二进制源读写结构体,会什么会出现重复读取最后一行的情况

2013-03-25 
C++二进制流读写结构体,会什么会出现重复读取最后一行的情况?代码见下方,写入数据之后,重新读取,最后一行

C++二进制流读写结构体,会什么会出现重复读取最后一行的情况?
代码见下方,写入数据之后,重新读取,最后一行都是读取2次,这里只读写一个结构体,counter输出为2,为什么?

typedef struct OilInfoObject{
unsigned __int64 RFID;
char time[22];
char oilType[6];
float price;
float total;
float totalPrice;
char posNum[6];  
char operatorNum[6];
}OilInfoObject;

int main(int argc, char *argv[])
{

  OilInfoObject firstObj;
  firstObj.RFID = 2012112624120345;
 
 char* ptime= "2012/11/21 11:40:50";
 strcpy(firstObj.time,ptime);
 
 char* poiltype = "97#";
 strcpy(firstObj.oilType,poiltype);
 
  firstObj.price = 7.10;
  firstObj.total = 55.00;
  firstObj.totalPrice = 390.25;
 
char* posNum = "001";
strcpy(firstObj.posNum,posNum);

char* operatorNum = "001";
strcpy(firstObj.operatorNum,operatorNum);
 
 std::ofstream fout("Oil_20121121_101_102.dat", std::ios::binary|std::ios::app);

 fout.close();

 
 std::ifstream fin("Oil_20121121_101_102.dat", std::ios::binary); 
 if(fin.fail())
 {
 std::cout<<"文件打开失败!"<<std::endl;
 return 0;
 }
 int counter = 0;

 while (!fin.eof()) {
 counter++;
OilInfoObject readObj;
 fin.read((char *)(&readObj), sizeof(readObj));
 std::cout<<counter<<std::endl;
 }
return 0;

}

[解决办法]
fread后判断文件流状态

热点排行