读书人

关于ifstream的有关问题

发布时间: 2012-03-14 12:01:12 作者: rapoo

关于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;
}

读书人网 >C++

热点推荐