C++ ifstream 读写文件 空文件的开始不是eof()?
最近用fstream比较多,发现如果用ifstream读取一个空文件的时候,开始的文件指针不是eof(),这样的话,就算是空文件也能读取出东西来,只不过是一群垃圾。大家有碰见过这种情况的吗?一般是发生在数据还没初始化的时候。
怎样避免呢?
例如代码:struct NormalBookStruct{
char title;
char author;
bool loanState;
};
char* normalDataFile = "normalBook.dat";
vector<NormalBookStruct> normalBookStruct;
{
ifstream file(normalDataFile, ios::binary);
NormalBookStruct bufStruct;
while(!file.eof()){
cout << "读取字符" << endl;
//file.getline((char*)(&bufStruct), sizeof(NormalBookStruct));
file.read((char*)(&bufStruct), sizeof(NormalBookStruct));
normalBookStruct.push_back(bufStruct);
}
file.close();
} 你最好检测文件长度,按照文件长度进行读取。
印象里某些读取文件的函数,如果超额读取,会读取到其他数据,直到文件分配的空间被读取完毕而不是实际文件内容被读取完毕。超额部分的垃圾,是以前这个位置存储数据的遗留内容。
回复 2# jiangtao9999 的帖子
......是的,必须要检测文件长度。string s;
s << file;
if(s.length == 0)
return;
这些东西真麻烦。明明是eof()他怎么还读:shock: 某些函数不按照实际文件大小,而是根据分配的数据块,每次读取都是读取 N 个块。
页:
[1]