我想使用c ++访问文本文件中的最后6行。任何人都可以为我提供一个在恒定时间内到达那里的代码吗?提前致谢。 :)
fstream myfile("test.txt");
myfile.seekg(-6,ios_base::end);
string line;
while(getline(myfile,line))
{
if(vect.size() != VSIZE)
{
vect.push_back(line);
}
else
{
vect.erase(v.begin());
vect.push_back(line);
}
}
似乎没有工作...... VSIZE是6 ...请向我提供帮助和工作代码。
答案 0 :(得分:2)
这一行:
myfile.seekg(-6,ios_base::end);
寻找文件结尾前的第6个字节,而不是6行。您需要向后计算换行或从头开始。因此,如果删除上面的行,您的代码应该可以正常工作。
答案 1 :(得分:0)
This回答解释了为什么你所做的事情无法奏效。下面我将解释一下将起作用。
第2步可以通过寻找end-X来改进,其中X是通过文件末尾的某种二分法派生的。
答案 2 :(得分:0)
这是一项非常难的事情,需要考虑几个边缘情况。
一般来说,策略是:
我将代码留作练习。
答案 3 :(得分:0)
最简单的方法可能只是mmap()
文件。这将其内容放入您的虚拟地址空间,因此您可以轻松地从最后六行结束时扫描它。
由于mmapping文件会让你觉得整个文件存在于一个大缓冲区的内存中而没有实际加载你不需要的部分,它既避免了不必要的I / O又减轻了你管理不断增长的缓冲区的负担当你向后搜索行结尾时。