读书人

C++二进制源读写结构体会什么会出现

发布时间: 2013-03-25 15:43:04 作者: rapoo

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后判断文件流状态

读书人网 >C++

热点推荐