crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Непонятный нюанс while(!atEnd())
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 29.9.2010, 17:13
  я такой код использовал в нескольких программах и даже не задумывался о другом варианте.
NordWest Дата 29.9.2010, 17:08
  Конец файла конечно. Ведь в том смысл.
Litkevich Yuriy Дата 29.9.2010, 16:21
 
Цитата(NordWest @ 29.9.2010, 17:59) *
Т.е. вообще по QString определять?
что определять?
NordWest Дата 29.9.2010, 13:59
  Этот?
QTextStream stream(stdin);
QString line;
do {
     line = stream.readLine();
} while (!line.isNull());


Т.е. вообще по QString определять?
Litkevich Yuriy Дата 29.9.2010, 13:22
  NordWest, есть же готовый пример в документации, зачем гадать.
NordWest Дата 29.9.2010, 13:09
  Нет, не оттуда. Обычные текстовые файлы, в той же папке, что и программа. Это не устройства и не процессы. Я с такими ещё не связывался. А у обычных файлов странно получить ситуацию, когда его длинна изменилась за время считывания. Если я правильно интерпретирую.
Т.е. предпочтительнее использовать QTextStream::atEnd () ?
kwisp Дата 29.9.2010, 12:36
 
Цитата
bool QIODevice::atEnd () const [virtual]
Returns true if the current read and write position is at the end of the device (i.e. there is no more data available for reading on the device); otherwise returns false.

For some devices, atEnd() can return true even though there is more data to read. This special case only applies to devices that generate data in direct response to you calling read() (e.g., /dev or /proc files on Unix and Mac OS X, or console input / stdin on all platforms).

See also bytesAvailable(), read(), and isSequential().


Цитата
bool QTextStream::atEnd () const
Returns true if there is no more data to be read from the QTextStream; otherwise returns false. This is similar to, but not the same as calling QIODevice::atEnd(), as QTextStream also takes into account its internal Unicode buffer.


что за файл читаешь? не из /dev или /proc случаем?
NordWest Дата 29.9.2010, 11:37
  Сейчас в конкретном примере показать не смогу, но пару раз встречался. Вобщем то в том и дело, что снова пишу подобный код и не могу вспомнить правильный вариант.
Ситуация такая. Построчное считывание из текстового файла. Код примерно такой:

CODE
QFile pnFile(plnFileName);
pnFile.open(QIODevice::ReadOnly | QIODevice::Text);
QTextStream pnStream(&pnFile);

while(!pnStream.atEnd())
{
...
}


В цикле происходит считывание из pnStream текстовых строк. Проблема в том, что иногда цикл завершается на половине файла. И зависит это от того, что стоит в while. В примере один случай, а можно написать while(!pnFile.atEnd()). И в одном из вариантов будет всё в порядке, а в другом нет и файл не будет считан до конца. Может быть я каких-то нюансов не учёл, а они важны. Я это случайно заметил, когда обнаружил уж очень большую недостачу данных. Может тут какое-то явное правило существует?..
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 16.5.2022, 11:20