关于ifstream的问题
下面是出问题的代码,其中Record是自己定义的类,为了描述方便,将原先的私有变量都改写成公有变量的形式
Record rec;
ifstream fin(fileName);
for(i=0;!fin.eof();i++)
{
fin.seekg(i*sizeof(Record),ios_base::beg);
fin.read((char *)&rec,sizeof(Record));
if(!fin.eof())
{
if(rec.exist) //exist是布尔类型
cout < <setiosflags(ios_base::left) < <setw(15) < <rec.itsName < <endl;
}
}
运行时发现,只要中间有一条记录的exist是false,后面的记录就都打印不出来了
如果把if(rec.exist)删除,则全部能打印出来。
请问这是怎么回事?与ifstream类有关,还是与bool类型有关?
[解决办法]
false存储的时候是0,fstream文件是文本文件,碰到0的时候会认为是文件尾到了,即fin.eof()为真,那肯定就退出循环了。
[解决办法]
ifstream fin(fileName, ios_base::binary);
读/写这个文件的时候都要加binary标志
while (fin.read((char *)&rec,sizeof(Record)))
{
if(rec.exist) //exist是布尔类型
cout < < std::left < <setw(15) < <rec.itsName < <endl;
}