2015-07-27 6 views
0

После открытого текстового файла, я прочитал все с:QFile atEnd: как сбросить «atEnd»?

QFile MyFile("myfile.txt); 
MyFile.open(QIODevice::ReadOnly); 
QTextStream in (&MyFile); 
while (!in.atEnd()) 
{ 
(do something); 
} 
MyFile.close(); 

Когда я вспоминаю свою функцию, то «в то время как» цикл выглядит как в его конце, так что ни одна из функций, помещенных в нем не делается. Это способ повторной инициализации «atEnd», таким образом, я могу снова войти в цикл «while»?

ответ

3

QTextStream имеет функцию seek, позволяющую установить положение потока. Вызов

in.seek(0) 

установит поток в начало файла.

Однако, если код в вопросе находится в функции, QFile и QTextStream должны быть удалены, когда функция существует, поскольку они созданы в стеке, так что здесь может что-то еще происходить, что вопрос опускает.

+0

Также используется «in.seek (0)», в то время как цикл по-прежнему не оценивается второй раз, если он был завершен. Функция, помещенная внутри поиска строки в текстовом файле; если строка найдена, это обнаружено и помещено в QLabel; если нет, тестовый файл считывается от начала до конца, предупреждая пользователя о том, что текст несоответствия не найден. Только в этом последнем случае новый вход в цикл while не приходит (анализ bool "in.atEnd" всегда выглядит как true (файл уже в конце) – LittleSaints

+0

Я подозреваю, что проблема лежит за пределами минимального кода примера, который вы указали – TheDarkKnight

+0

вы правы, потому что перед циклом было редактирование имени файла, которое изменило имя файла, поэтому во втором проходе цикла прочитанный файл не был тем же. В любом случае мне пришлось использовать «while (line.isNull ()) "вместо" while (in.atEnd) ". Проблема решена. – LittleSaints

Смежные вопросы