首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

QDataStream写资料完成后,立马读时 读不读出来 为什么?

2013-09-07 
QDataStream写文件完成后,立马读时 读不读出来 为什么??QFile file(file.dat)file.open(QIODevice::Wri

QDataStream写文件完成后,立马读时 读不读出来 为什么??

QFile file("file.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);   // we will serialize the data into the file
out.setVersion(QDataStream::Qt_4_0);
out << QString("the answer is");   // serialize a string
out << (qint32)42;        // serialize an integer



//读二进制文件
QFile file("file.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);    // read the data serialized from the file
in.setVersion(QDataStream::Qt_4_0);
QString str;
qint32 a;
in >> str >> a;           // extract "the answer is" and 42
qDebug()<<str<<a;


如果读写分别运行就OK, 百思不得其解。。  Qt QDataStream
[解决办法]
现在的电脑系统,都是有缓冲的文件系统,必须关闭文件,才能把全部数据写入磁盘(如果数据少,一点也没有写入,直接读是空文件),关闭写入的文件。再打开就能正常读出来。
Qt的QFile是自动关闭的,这两段代码写在一起,自然是在函数结束的时候关闭文件,所以读不出来。

[解决办法]
首先你的代码有问题,就是 没有关闭文件。其次楼上说的也没有什么道理。最关键的还是文件指针,如果去要读的话,需要把文件指针前置。因为读写是一个指针。写完以后,指针其实在你要读内容的后面。
[解决办法]
主要是你写的时候,没有将文件的缓冲flush(),如果你先将QFile关闭了,再重新打开,那么就可以正常的读取了。
[解决办法]
引用:
首先你的代码有问题,就是 没有关闭文件。其次楼上说的也没有什么道理。最关键的还是文件指针,如果去要读的话,需要把文件指针前置。因为读写是一个指针。写完以后,指针其实在你要读内容的后面。

楼主是先写,后读,两个QFile,seek的问题不存在。

热点排行