之前遇到过这一个问题,用了先读取再判断是否到文件结尾,来判断读取的内容是否有效。但是当时只是大概地了解了一下,并没有很好地去理解。
前两天,应用的时候都没有想起这个处理方式,后来发现文件读取有问题。找了相关资料,再加上看了一个提问(如何判断读取文件结束)中各位高手的见解。终于有了点眉目。
对于其他,上面那些高手说了很多,我也不多说。根据高手们的见解,再结合我自己一情况,读到文件结尾(测试的时候我们自己知道)有两种情况。简单地说,我是按行来读取文件的,文件结尾有两种情况。1) 最后一行没有敲回车;2) 最后一行内容结束敲了一个回车。
现在来分析,第一种情况:读最后一行的时候,读到文件结束,读入内容,并作了文件结束标志。这是读取的内容时有的,eof判断是已经到文件结尾了。第二种情况:读最后一行,这里是遇到回车,读取结束,读入内容,但是,这时候没有标志文件结束,eof判断的时候得到的结果就是文件没有结束,但内容已经读取完了,在下一次读取的时候,没有读到内容,而且标志文件结束。
这种类似的问题还会出现在读取整数等其他情况下。
所以,先读再eof判断,在第一种情况下会使最后一行的数据丢失。实际应该先eof判断,再在读取数据的时候进行判断,可以达到想要的结果。