C++ 将流指针倒回行

C++ 将流指针倒回行,c++,C++,我有一个输入文件流和一个声明为: std::ifstream finput; std::string tmp_string; 我使用std::getline(finput,tmp_字符串)迭代地读取行 问题是:如何倒带流指针,以便在此之后倒带std::getline(finput,tmp_string)的第二个调用会返回相同的结果(与前面的一步相同)?一旦你读了这行,就太晚了。你不能再回到过去了 你没有记住的位置。如果需要,唯一的解决方案是 在getline之前调用finput.gtell()

我有一个输入文件流和一个声明为:

std::ifstream finput;
std::string tmp_string;
我使用
std::getline(finput,tmp_字符串)迭代地读取行


问题是:如何倒带流指针,以便在此之后倒带
std::getline(finput,tmp_string)的第二个调用
会返回相同的结果(与前面的一步相同)?

一旦你读了这行,就太晚了。你不能再回到过去了 你没有记住的位置。如果需要,唯一的解决方案是 在
getline
之前调用
finput.gtell()
,然后查找所需内容
返回

嗯,有道理。但是,寻找
当前位置-最后一个字符串大小的实际错误是什么呢。最明显的是数值无论如何都不正确:
getline
还将提取尾部的
'\n'
。也许更重要的是,如果传递给
gseek
streampos
不是通过先前对同一文件成功调用
tellg
获得的,则查找的效果是未定义的。@zerkms:一个原因是,在以文本模式读取文件时,文件偏移量是神奇的神秘事物,因为实现可以在转换换行符或其他特定于实现的控制字符时在引擎盖下玩把戏。因此,C标准是安全的,它说您只能寻找一个“真实”的位置,即流以前所在的位置。您不能组成一个数字并在文本文件中查找它,因此不需要实现来支持,例如,当前位置介于
\r
\n
之间。。。。对于将相同规则应用于文件流,可能还有其他的C++原因,我不确定。@SteveJessop这就是我自己想知道的。C允许对以二进制most打开的文件执行任意
fseek
;C++不允许<代码>查找(SyrPOS)< /C>。