Qt-读写二进制文件(数据结构)

二进制文件存储方式比较方便,文本小,保密效果好

  • 定义一个数据结构并实现相关操作
  • 使用QDataStream进行读写操做

数据结构


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <QtCore>

struct AccountInfo
{
// 数据
    QString Account;
    QString LogPasswd;

// 初始化
    AccountInfo(){}
    AccountInfo(const QString &account,
                const QString &logPasswd) :
        Account(account),
        LogPasswd(logPasswd){}
    bool operator==(const AccountInfo &other) const
    {
        return Account == other.Account && LogPasswd == other.LogPasswd;
    }
};

// 符号重载
inline QDataStream &operator<<(QDataStream &stream, const AccountInfo &Info)
{
    return stream << Info.Account << Info.LogPasswd;
}

inline QDataStream &operator>>(QDataStream &stream, AccountInfo &Info)
{
    return stream >> Info.Account << Info.LogPasswd;
}

写文件


1
2
3
4
5
6
7
8
9
10
11
12
  QList<AccountInfo> Info;
    Info.push_back(AccountInfo("1111111111", "11111111111111111111111"));
    Info.push_back(AccountInfo("2222222222", "22222222222222222222222"));
    Info.push_back(AccountInfo("3333333333", "33333333333333333333333"));
    QFile file("AccountInfo.dat");
    if (!file.open(QIODevice::WriteOnly)) {
        qDebug() << "open file failed.";
        return;
    }
    QDataStream out(&file);
    out << Info;
    file.close();

读文件


1
2
3
4
5
6
7
8
9
10
11
12
 QFile file("AccountInfo.dat");
    if (!file.open(QIODevice::ReadOnly)) {
        qDebug() << "open file failed.";
        return;
    }
    QList<AccountInfo> Info;
    QDataStream in(&file);
    in >> Info;
    file.close();
    for(const auto& d : qAsConst(Info)){
        qDebug() << "Account:" << d.Account << "Passwd:" << d.LogPasswd;
    }

  • 其中QList可以换成QVector等其他数据存储结构

发表评论

电子邮件地址不会被公开。 必填项已用*标注