Если вы предоставите необязательный параметр delim
для ignore()
, то он может остановиться на новой строке:
streampos old = is.tellg();
is.ignore(num, '\n');
if (is.tellg() != old + num) {
// didn't ignore "num" characters, if not eof or error then we
// must have reached a newline character.
}
Однако есть загвоздка - когда ignore()
попадает в разделитель, он тоже игнорирует это. Так что, если вы нажмете разделитель точно в конце вашего набора игнорируемых символов, то tellg()
вернет old + num
. AFAIK, нет никакого способа узнать, был ли последний игнорируемый символ разделителем. Также нет способа указать разделитель, который не является одним символом.
Я также не знаю, может ли и когда это произойти быстрее, чем просто чтение num
байтов и поиск в нем строк новой строки. Моя первоначальная мысль была: "Какая часть различий между ignore()
и read()
неочевидна?" ; -)