QFile. Only close() do flush()
-
I use QFile. After I finish writing I do flush() and then I want readAll() file back. Why zero inside?
QFile file; file.setFileName("test.bin"); if(!file.open(QIODeviceBase::ReadWrite | QIODeviceBase::Truncate)){ qWarning() << "err Can't open file" << file.fileName(); } const quint8 myData[] = { 1,2,3 }; file.write((const char*)myData, sizeof(myData)); file.flush(); // //Why to get true arr size I need close, open? // csvDefaults.close(); // csvDefaults.open(QIODeviceBase::ReadWrite); const QByteArray arr(file.readAll()); qDebug() << "arr size=" << arr.size(); file.close();
I can fix my problem if I do close() and open(), but why I can't do flush() only?
Full code here.
-
I use QFile. After I finish writing I do flush() and then I want readAll() file back. Why zero inside?
QFile file; file.setFileName("test.bin"); if(!file.open(QIODeviceBase::ReadWrite | QIODeviceBase::Truncate)){ qWarning() << "err Can't open file" << file.fileName(); } const quint8 myData[] = { 1,2,3 }; file.write((const char*)myData, sizeof(myData)); file.flush(); // //Why to get true arr size I need close, open? // csvDefaults.close(); // csvDefaults.open(QIODeviceBase::ReadWrite); const QByteArray arr(file.readAll()); qDebug() << "arr size=" << arr.size(); file.close();
I can fix my problem if I do close() and open(), but why I can't do flush() only?
Full code here.
@DungeonLords
This may or may not apply toQFile
, I don't know, but if you open a file for read/write, write to it, then:- After write file pointer is at end of written bytes, need to seek to beginning/rewind to read from start; and
- Many C/C++ implementations require (or at least used to) seek between write/read or read/write anyway.
And btw
QFile::readAll()
says "Reads all remaining data from the device", that does not mean all data in file from start, it means from file pointer onward only. As per first point above. -
I use QFile. After I finish writing I do flush() and then I want readAll() file back. Why zero inside?
QFile file; file.setFileName("test.bin"); if(!file.open(QIODeviceBase::ReadWrite | QIODeviceBase::Truncate)){ qWarning() << "err Can't open file" << file.fileName(); } const quint8 myData[] = { 1,2,3 }; file.write((const char*)myData, sizeof(myData)); file.flush(); // //Why to get true arr size I need close, open? // csvDefaults.close(); // csvDefaults.open(QIODeviceBase::ReadWrite); const QByteArray arr(file.readAll()); qDebug() << "arr size=" << arr.size(); file.close();
I can fix my problem if I do close() and open(), but why I can't do flush() only?
Full code here.
-