1. 文件逐行读取
逐行读取, 行之间用回车换行符间隔
std::ifstream fin(fileName.c_str());
if(fin.is_open())
{
std::string oneLine = "";
while(getline(fin, oneLine))
{
......
}
fin.close();
}
2. 文件逐词读取
逐词读取, 词之间用空格间隔
std::ifstream fin(fileName.c_str());
if(fin.is_open())
{
std::string word = "";
while(fin>>word)
{
......
}
fin.close();
}
3. 文件结束标志
std::ifstream fin(fileName.c_str());
if(fin.is_open())
{
std::string word = "";
while(fin.peek() != EOF)
{
fin>>word;
......
}
fin.close();
}
上面的代码处理方法会出现一个问题:文件的最后一个词会被处理两遍,因为peek()返回当前文件指针下一个位置的字符,而指针位置不变。当while循环体中,文件指针指向最后一个字符,则需要再下一个循环中才能触发EOF。
fin.eof()也会出现同样的问题, eof在读取完最后一个数据后,仍是false, 当再次试图读一个数据时,由于发现没数据可读了才知道到文件末尾了,此时才修改标志,eof变为true。
解决方法:根据读取的字符进行判断进行判断文件的结束。