QDataStream. (Не получается записать/прочесть.)

Модератор: Модераторы разделов

0x44616E69696C
Сообщения: 4
ОС: Debian wheezy & Windows 7

QDataStream.

Сообщение 0x44616E69696C »

Не получается ни записать ни прочесть из потока. Видимо я чего-то не понимаю.
Вот код:

Код:

quint32 num; QFile file("text"); if (file.open(QIODevice::ReadOnly)) { QDataStream stream(&file); while(!stream.atEnd()) { qDebug()<<"in while"; stream>>num; } qDebug()<<num <<" " <<file.isWritable() <<" " <<file.isReadable(); if (stream.status() != QDataStream::Ok) qDebug()<<"Error to read"; } else qDebug()<<"Error to open";


Выдает: in while; 0; false; true; Error to read

Что я делаю не так?
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: QDataStream.

Сообщение drBatty »

0x44616E69696C писал(а):
10.01.2013 15:46
Что я делаю не так?

наверное это код на языке C++ с библиотекой Qt4, а вы его видимо выполняете в bash'е.

Собирайте, используя kdevelop например.

ЗЫЖ кстати, это отрывок кода, он всё равно не соберётся.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
FatZer
Сообщения: 33
ОС: Gentoo

Re: QDataStream.

Сообщение FatZer »

0x44616E69696C писал(а):
10.01.2013 15:46
Выдает: in while; 0; false; true; Error to read

Что я делаю не так?

файл находится не в том каталоге, из которого запускается программа и/или пустой/не текстовый...
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)

Re: QDataStream.

Сообщение Voral »

0x44616E69696C писал(а):
10.01.2013 15:46
Не получается ни записать ни прочесть из потока. Видимо я чего-то не понимаю.

А какой размер файла который вы считываете?
Полагаю размер файла не кратен размеру считываемых данных. У вас случаем файл не меньше чем 32бита? В этом случае вы пытаетесь прочесть за пределами конца файла и получаете не нулевой статус.
Вы бы в цикл qDebug засунули и выводили что считывается и какой статус.
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
Аватара пользователя
Женя Подсыпальников
Сообщения: 482

Re: QDataStream.

Сообщение Женя Подсыпальников »

0x44616E69696C писал(а):
10.01.2013 15:46
Что я делаю не так?


Вот-тут: QFile file("text");

Из доки: QFile::QFile ( const QString & name ) - Constructs a new file object to represent the file with the given name.

То-бишь, пустой файл создаётся, потом - открывется и читается... :)

(
Нокиа признаёт хилую защиту atEnd() :
Reimplemented from QIODevice::atEnd().
Returns true if the end of the file has been reached; otherwise returns false.
For regular empty files on Unix (e.g. those in /proc), this function returns true, since the file system reports that the size of such a file is 0.
Therefore, you should not depend on atEnd() when reading data from such a file, but rather call read() until no more data can be read.
)
Пойдём на рыбалку !
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)

Re: QDataStream.

Сообщение Voral »

Женя Подсыпальников писал(а):
10.01.2013 17:37
Вот-тут: QFile file("text");
Из доки: QFile::QFile ( const QString & name ) - Constructs a new file object to represent the file with the given name.
То-бишь, пустой файл создаётся, потом - открывется и читается... :)

Вообщето создается объект, а не файл ;)
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
Аватара пользователя
Женя Подсыпальников
Сообщения: 482

Re: QDataStream.

Сообщение Женя Подсыпальников »

Точно, объект файла в рабочей памяти :)
Пойдём на рыбалку !
Спасибо сказали:
0x44616E69696C
Сообщения: 4
ОС: Debian wheezy & Windows 7

Re: QDataStream.

Сообщение 0x44616E69696C »

drBatty писал(а):
10.01.2013 16:27
наверное это код на языке C++ с библиотекой Qt4, а вы его видимо выполняете в bash'е.


Неа, я его компилю: qmake -project & qmake & make .

FatZer писал(а):
10.01.2013 16:47
файл находится не в том каталоге, из которого запускается программа и/или пустой/не текстовый...


Специально создал, и записал туда число 1234.

Voral писал(а):
10.01.2013 17:11
Полагаю размер файла не кратен размеру считываемых данных. У вас случаем файл не меньше чем 32бита? В этом случае вы пытаетесь прочесть за пределами конца файла и получаете не нулевой статус.


Хм, не думал об этом, 1234 вроде 11 бит т.к. 10011010010, попробую. Хотя думал старшие биты просто будут равны 0, т.е. 00000000000000000000010011010010.

Женя Подсыпальников писал(а):
10.01.2013 17:37
Вот-тут: QFile file("text");


Создан уже.

Спасибо за ответы, попробую уже завтра, просто пока что некоторые проблемы с системой.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: QDataStream.

Сообщение NickLion »

0x44616E69696C писал(а):
10.01.2013 20:53
Специально создал, и записал туда число 1234.
В текстовом виде? Разочарую, QDataStream работает с бинарным представлением, о чём Voral и говорил. Т.е. вместо ожидаемых "1234" получится 825373492 (если не сменить byte order).

0x44616E69696C писал(а):
10.01.2013 20:53
Хм, не думал об этом, 1234 вроде 11 бит
"1234" — это ровно 32 бита. 0x31 0x32 0x33 0x34 = 0x31323334 (для умолчательного byte order) = 825373492.

0x44616E69696C писал(а):
10.01.2013 20:53
Спасибо за ответы, попробую уже завтра, просто пока что некоторые проблемы с системой.
Скорее всего в этом и дело. Код работает.
Спасибо сказали: