我正在尝试获取文件的最后一行,使用此处描述的逻辑最快的方法来读取文本文件的最后一行?,但我得到了一些奇怪的异常:
score.seekg(-2, ios::cur);
将我的流重置为相同的字符,所以我得到无限循环。但是,将其设置为-3
完美工作:
fstream score("high_scores.txt"); //open file
if(score.is_open()) //file exist
{
score.seekg(0, ios::end);
char tmp = '~';
while(tmp != '\n')
{
score.seekg(-3, ios::cur);
if((int)score.tellg() <= 0) //start of file is start of line
{
score.seekg(0);
break;
}
tmp = score.get();
cout << tmp << "-";
}
}
同样,问题是 - 此代码仅适用于seekg()
offset -3
,而理论上它应该适用于-2
. 这可以以某种方式解释吗?文件内容是这样的(文件末尾的换行符):
28 Mon Jul 10 16:11:24 2017
69 Mon Jul 10 16:11:47 2017
145 Mon Jul 10 16:53:09 2017
我使用的是 Windows,所以现在我明白了为什么我需要-3
从文件末尾偏移(以传递CR和LF字节)。但是让我们考虑第一个字符(从结尾)。
28 Mon Jul 10 16:11:24 2017
因此,流到达7
. 它提取它,并移动到CR字节。如果,那么,在下一次循环迭代中我们将它偏移-3
,我们会得到0
,但不是1
!但实际上,我得到了1
!并且在-3
偏移量下一切正常。这对我来说是个谜。我无法摆脱它。