我ifstream
用来解析 C++ 代码中的文件。我无法使用seekg()
和tellg()
跳转到代码的特定行。
特别是我想用getLine方法从文件的特定位置读取一行。上一次迭代中保存的位置。
您只需跳过所需的行数。最好的方法是使用 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。
似乎没有特定的 C++ 函数,如“seekline”,可以满足您的需求,我看到了两种解决此任务的方法:
seekg
L * N偏移量。如果文本文件忠实于它的大小要求,则第一种情况会更有效。第二种情况为长文本文件和罕见的编辑操作带来了最佳性能。