Qt-二進位制檔案讀寫-QDataStream
阿新 • • 發佈:2019-01-10
轉自:http://blog.51cto.com/devbean/293892
今天開始進入 Qt 的另一個部分:檔案讀寫,也就是 IO。檔案讀寫在很多應用程式中都是需要的。Qt 通過 QIODevice 提供了IO的抽象,這種裝置(device)具有讀寫位元組塊的能力。常用的IO讀寫的類包括以下幾個:QFlie | 訪問本地檔案系統或者嵌入資源 |
QTemporaryFile | 建立和訪問本地檔案系統的臨時檔案 |
QBuffer | 讀寫 QByteArray |
QProcess | 執行外部程式,處理程序間通訊 |
QTcpSocket | TCP 協議網路資料傳輸 |
QUdpSocket | 傳輸 UDP 報文 |
QSslSocket | 使用 SSL/TLS 傳輸資料 |
- QImage image(
- QMap<QString, QColor> map;
- map.insert("red", Qt::red);
- map.insert("green", Qt::green);
- map.insert("blue", Qt::blue);
- QFile file("facts.dat");
- if (!file.open(QIODevice::WriteOnly)) {
- std::cerr << "Cannot open file for writing: "
- << qPrintable(file.errorString()) << std::endl;
- return;
- }
- QDataStream out(&file);
- out.setVersion(QDataStream::Qt_4_3);
- out << quint32(0x12345678) << image << map;
- quint32 n;
- QImage image;
- QMap<QString, QColor> map;
- QFile file("facts.dat");
- if (!file.open(QIODevice::ReadOnly)) {
- std::cerr << "Cannot open file for reading: "
- << qPrintable(file.errorString()) << std::endl;
- return;
- }
- QDataStream in(&file);
- in.setVersion(QDataStream::Qt_4_3);
- in >> n >> image >> map;
- QFile file("file.xxx");
- file.open(QIODevice::WriteOnly);
- QDataStream out(&file);
- // Write a header with a "magic number" and a version
- out << (quint32)0xA0B0C0D0;
- out << (qint32)123;
- out.setVersion(QDataStream::Qt_4_0);
- // Write the data
- out << lots_of_interesting_data;
- QFile file("file.xxx");
- file.open(QIODevice::ReadOnly);
- QDataStream in(&file);
- // Read and check the header
- quint32 magic;
- in >> magic;
- if (magic != 0xA0B0C0D0)
- return XXX_BAD_FILE_FORMAT;
- // Read the version
- qint32 version;
- in >> version;
- if (version < 100)
- return XXX_BAD_FILE_TOO_OLD;
- if (version > 123)
- return XXX_BAD_FILE_TOO_NEW;
- if (version <= 110)
- in.setVersion(QDataStream::Qt_3_2);
- else
- in.setVersion(QDataStream::Qt_4_0);
- // Read the data
- in >> lots_of_interesting_data;
- if (version >= 120)
- in >> data_new_in_XXX_version_1_2;
- in >> other_interesting_data;