我正在使用ifstream
来解析c ++代码中的文件。我无法使用seekg()
和tellg()
来跳转代码的特定行。
特别是我想从文件的特定位置读取一行,使用方法getLine。位置保存在先前的迭代中。
答案 0 :(得分:3)
您只需跳过所需的行数即可。 最好的方法是使用std :: istream :: ignore
忽略字符串for (int currLineNumber = 0; currLineNumber < startLineNumber; ++currLineNumber){
if (addressesFile.ignore(numeric_limits<streamsize>::max(), addressesFile.widen('\n'))){
//just skipping the line
} else {
// todo: handle the error
}
}
第一个参数是要提取的最大字符数。如果这正是numeric_limits :: max(),则没有限制。
由于性能更好,您应该使用is而不是std :: getline。
答案 1 :(得分:1)
似乎没有特定的C ++函数,比如“seekline”,满足您的需求,我看到了两种方法来解决这个问题:
seekg
L * N 偏移。如果文本文件忠于其大小要求,则第一种情况更有效。第二种情况为长文本文件和罕见的编辑操作带来了最佳性能。