zoukankan      html  css  js  c++  java
  • Qt 多种方式读写二进制文件

    将文本数据写入二进制文件,然后从二进制文件中读出,还原为文本数据

     1 #include "mainwindow.h"
     2 #include <QApplication>
     3 #include <QFile>
     4 #include <QDataStream>
     5 
     6 int main(int argc, char *argv[])
     7 {
     8     QApplication a(argc, argv);
     9 
    10     //写二进制文件
    11     QFile file("F:/1.txt");
    12     if(!file.open(QIODevice::WriteOnly))
    13     {
    14         qDebug() << "Can't open file for writing";
    15         return 0;
    16     }
    17     QDataStream out(&file);
    18     out.setVersion(QDataStream::Qt_5_7);
    19     out << int(12) << QByteArray("123");
    20     file.close();
    21 
    22     //读二进制文件
    23     if (!file.open(QIODevice::ReadOnly))
    24     {
    25         qDebug() << "Cannot open file for reading: ";
    26         return 0;
    27     }
    28     QDataStream in(&file);
    29     in.setVersion(QDataStream::Qt_5_7);
    30     int n;
    31     QByteArray s;
    32     in >> n >>  s;
    33     file.close();
    34     qDebug() << n << s;
    35 
    36     return a.exec();
    37 }

    运行结果:
    这里写图片描述

     1 #include "mainwindow.h"
     2 #include <QApplication>
     3 #include <QFile>
     4 #include <QDebug>
     5 
     6 class T
     7 {
     8 public:
     9     int a;
    10     double b;
    11     QString c;
    12 
    13     T(int a1, double b1, QString c1);
    14 
    15     friend QDataStream& operator<<(QDataStream &out, const T &t);
    16     friend QDataStream& operator>>(QDataStream &in, T &t);
    17 };
    18 
    19 T::T(int a1, double b1, QString c1)
    20 {
    21     a = a1;
    22     b = b1;
    23     c = c1;
    24 }
    25 
    26 QDataStream& operator <<(QDataStream &out, const T &t)
    27 {
    28     out << t.a << t.b << t.c;
    29     return out;
    30 }
    31 
    32 QDataStream& operator >>(QDataStream &in, T &t)
    33 {
    34     int a;
    35     double b;
    36     QString c;
    37     in >> a >> b >> c;
    38     t.a = a;
    39     t.b = b;
    40     t.c = c;
    41     return in;
    42 }
    43 
    44 int main(int argc, char *argv[])
    45 {
    46     QApplication a(argc, argv);
    47 
    48     //写二进制文件
    49     T t(1, 2, "3");
    50     QFile writeFile("1.dat");
    51     writeFile.open(QIODevice::WriteOnly);
    52     QDataStream out(&writeFile);
    53     out << t;
    54     writeFile.close();
    55 
    56     //读二进制文件
    57     QFile readFile("1.dat");
    58     readFile.open(QIODevice::ReadOnly);
    59     QDataStream in(&readFile);
    60     in >> t;
    61     readFile.close();
    62     qDebug() << t.a << t.b << t.c;
    63 
    64     return 0;
    65     return a.exec();
    66 }

    运行结果:
    这里写图片描述

     1 #include "mainwindow.h"
     2 #include <QApplication>
     3 #include <QFile>
     4 #include <QDebug>
     5 
     6 class T
     7 {
     8 public:
     9     int a;
    10     double b;
    11     QString c;
    12 
    13     T(int a1, double b1, QString c1);
    14 };
    15 
    16 T::T(int a1, double b1, QString c1)
    17 {
    18     a = a1;
    19     b = b1;
    20     c = c1;
    21 }
    22 
    23 
    24 int main(int argc, char *argv[])
    25 {
    26     QApplication a(argc, argv);
    27 
    28     //写文件
    29     T t(1, 2, "34");
    30     QFile writeFile("1.dat");
    31     writeFile.open(QIODevice::WriteOnly);
    32     QDataStream out(&writeFile);
    33     out.writeRawData((char *)&t, sizeof(t));
    34     writeFile.close();
    35 
    36     //读文件
    37     QFile readFile("1.dat");
    38     readFile.open(QIODevice::ReadOnly);
    39     QDataStream in(&readFile);
    40     in.readRawData((char *)&t, sizeof(t));
    41     readFile.close();
    42     qDebug() << t.a << t.b << t.c;
    43 
    44     return 0;
    45     return a.exec();
    46 }

    运行结果:
    这里写图片描述

     1 #include "mainwindow.h"
     2 #include <QApplication>
     3 #include <QFile>
     4 #include <QDebug>
     5 
     6 int main(int argc, char *argv[])
     7 {
     8     QApplication a(argc, argv);
     9 
    10     //写文件
    11     int aa = 1;
    12     char b = 'c';
    13     double c = 2;
    14     QFile writeFile("1.dat");
    15     writeFile.open(QIODevice::WriteOnly);
    16     QDataStream out(&writeFile);
    17     out.writeRawData((char *)&aa, sizeof(int));
    18     out.writeRawData((char *)&b, sizeof(char));
    19     out.writeRawData((char *)&c, sizeof(double));
    20     writeFile.close();
    21 
    22     //读文件
    23     QFile readFile("1.dat");
    24     readFile.open(QIODevice::ReadOnly);
    25     QDataStream in(&readFile);
    26     in.readRawData((char *)&aa, sizeof(int));
    27     in.readRawData((char *)&b, sizeof(char));
    28     in.readRawData((char *)&c, sizeof(double));
    29     readFile.close();
    30     qDebug() << aa << b << c;
    31 
    32     return 0;
    33     return a.exec();
    34 }

    运行结果:
    这里写图片描述

     1 #include "mainwindow.h"
     2 #include <QApplication>
     3 #include <QFile>
     4 #include <QDebug>
     5 int main(int argc, char *argv[])
     6 {
     7     QApplication a(argc, argv);
     8 
     9     //写文件
    10     int aa = 1;
    11     char b = 'c';
    12     double c = 2;
    13     QFile writeFile("1.dat");
    14     writeFile.open(QIODevice::WriteOnly);
    15     QDataStream out(&writeFile);
    16     out.writeRawData((char *)&aa, sizeof(int));
    17     out.writeRawData((char *)&b, sizeof(char));
    18     out.writeRawData((char *)&c, sizeof(double));
    19     writeFile.close();
    20 
    21     //读文件
    22     QFile readFile("1.dat");
    23     readFile.open(QIODevice::ReadOnly);
    24     QDataStream in(&readFile);
    25     char bf[100];
    26     in.readRawData((char *)&bf, sizeof(int) + sizeof(char) + sizeof(double));
    27     readFile.close();
    28 
    29     memcpy(&aa, bf, sizeof(int));
    30     memcpy(&b, bf + 4, sizeof(char));
    31     memcpy(&c, bf + 5, sizeof(double));
    32     qDebug() << aa << b << c;
    33 
    34     return 0;
    35     return a.exec();
    36 }

    运行结果:

    这里写图片描述

     1 #include "mainwindow.h"
     2 #include <QApplication>
     3 #include <QFile>
     4 #include <QDebug>
     5 
     6 int main(int argc, char *argv[])
     7 {
     8     QApplication a(argc, argv);
     9 
    10     //写文件
    11     int aa = 1;
    12     char b = 'c';
    13     double c = 2;
    14     QFile writeFile("1.dat");
    15     writeFile.open(QIODevice::WriteOnly);
    16     QDataStream out(&writeFile);
    17     out.writeRawData((char *)&aa, sizeof(int));
    18     out.writeRawData((char *)&b, sizeof(char));
    19     out.writeRawData((char *)&c, sizeof(double));
    20     writeFile.close();
    21 
    22 
    23     //读文件
    24     QFile readFile("1.dat");
    25     readFile.open(QIODevice::ReadOnly);
    26     QByteArray by;
    27     char *bf;
    28     by = readFile.readAll();
    29     bf = by.data();
    30     readFile.close();
    31 
    32     memcpy(&aa, bf, sizeof(int));
    33     memcpy(&b, bf + 4, sizeof(char));
    34     memcpy(&c, bf + 5, sizeof(double));
    35     qDebug() << aa << b << c;
    36 
    37     return 0;
    38     return a.exec();
    39 }

    运行结果:

    这里写图片描述

     1 int main(int argc, char *argv[])
     2 {
     3     QApplication a(argc, argv);
     4 
     5     //写文件
     6     int aa = 1;
     7     char b = 'c';
     8     double c = 2;
     9     QFile writeFile("1.dat");
    10     writeFile.open(QIODevice::WriteOnly);
    11     QDataStream out(&writeFile);
    12     char bbf[100];
    13     char *p;
    14     p = (char *)&aa;
    15     bbf[0] = p[0];
    16     bbf[1] = p[1];
    17     bbf[2] = p[2];
    18     bbf[3] = p[3];
    19     p = (char *)&b;
    20     bbf[4] = p[0];
    21     p = (char *)&c;
    22     bbf[5] = p[0];
    23     bbf[6] = p[1];
    24     bbf[7] = p[2];
    25     bbf[8] = p[3];
    26     bbf[9] = p[4];
    27     bbf[10] = p[5];
    28     bbf[11] = p[6];
    29     bbf[12] = p[7];
    30 
    31     out.writeRawData(bbf, 13);
    32     writeFile.close();
    33 
    34 
    35     //读文件
    36     QFile readFile("1.dat");
    37     readFile.open(QIODevice::ReadOnly);
    38     QByteArray by;
    39     char *bf;
    40     by = readFile.readAll();
    41     bf = by.data();
    42     readFile.close();
    43 
    44     memcpy(&aa, bf, 4);
    45     memcpy(&b, bf + 4, 1);
    46     memcpy(&c, bf + 5, 8);
    47     qDebug() << aa << b << c;
    48 
    49     return 0;
    50     return a.exec();
    51 }

    运行结果:
    这里写图片描述

     1 #include "mainwindow.h"
     2 #include <QApplication>
     3 #include <QFile>
     4 #include <QDebug>
     5 
     6 int main(int argc, char *argv[])
     7 {
     8     QApplication a(argc, argv);
     9 
    10     //写文件
    11     int aa = 1;
    12     char b = 'c';
    13     double c = 2;
    14     int d = (int)c;
    15     QFile writeFile("1.dat");
    16     writeFile.open(QIODevice::WriteOnly);
    17     QDataStream out(&writeFile);
    18     char bbf[100];
    19     char *p;
    20     p = (char *)&aa;
    21     bbf[0] = p[0];
    22     bbf[1] = p[1];
    23     bbf[2] = p[2];
    24     bbf[3] = p[3];
    25     p = (char *)&b;
    26     bbf[4] = p[0];
    27     p = (char *)&d;
    28     bbf[5] = p[0];
    29     bbf[6] = p[1];
    30     bbf[7] = p[2];
    31     bbf[8] = p[3];
    32 
    33     out.writeRawData(bbf, 9);
    34     writeFile.close();
    35 
    36 
    37     //读文件
    38     QFile readFile("1.dat");
    39     readFile.open(QIODevice::ReadOnly);
    40     QByteArray by;
    41     char *bf;
    42     by = readFile.readAll();
    43     bf = by.data();
    44     readFile.close();
    45 
    46     int cc;
    47     memcpy(&aa, bf, 4);
    48     memcpy(&b, bf + 4, 1);
    49     memcpy(&cc, bf + 5, 4);
    50     qDebug() << aa << b << cc;
    51 
    52     return 0;
    53     return a.exec();
    54 }

    运行结果:
    这里写图片描述

  • 相关阅读:
    Codeforces Round #456 (Div. 2)
    Codeforces Round #455 (Div. 2)
    Codeforces Round #453 (Div. 1)
    Codeforces Round #450 (Div. 2)
    退役了
    退役了
    这个博客不想要了
    Hello!The familiar and strange world.
    真正的退役了。
    bzoj4231: 回忆树
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/12672905.html
Copyright © 2011-2022 走看看