当前位置: 代码迷 >> QT开发 >> QDataStream写资料完成后,立马读时 读不读出来 为什么?
  详细解决方案

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

热度:10   发布时间:2016-04-25 03:40:54.0
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的问题不存在。