文本流和数据流

Qt 中将文件类型分为2大类

文本文件

  • 文件内容是可读的文本字符

数据文件

  • 文件内容是直接的二进制数据

QFile 直接支持文本文件和数据文件的读写

qint64 read(char* data,qint64 maxSize)

QByteArray read(qint64 maxSize)

qint64 write(const char* data,qint64 maxSize)

qint64 write(const QByteArray& byteArray)

思考

如何将一个浮点数据写入文本文件和数据文件?

直接使用 QFile 读写

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile file("C:/Users/Administrator/Desktop/test.txt");

    if(file.open(QIODevice::WriteOnly))
    {
        QString s("liujie");
        double d(3.14);

        file.write(s.toStdString().c_str());
        file.write(reinterpret_cast<char *>(&d), sizeof(d));
        file.close();
    }

    if(file.open(QIODevice::ReadOnly))
    {
        QString s = "";
        double d = 0;

        s = file.read(6);
        file.read(reinterpret_cast<char *>(&d), sizeof(d));
        file.close();

        qDebug() << s;
        qDebug() << d;
    }

    return a.exec();
}

运行结果如下所示

Qt 提供辅助类简化了文本文件/数据文件的读写

QTextStream

  • 写入的数据全部转化为可读文本

QDataStream

  • 写入的数据根据类型转化为二进制数据

IO设备辅助类的使用方法

QTextStream 使用示例

void text_stream_test(QString f)
{
    QFile file(f);

    if(file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        QTextStream out(&file);

        out << "liujie" << endl;
        out << "Result: " << endl;
        out << 8 << '*' << 5 << "=" << 8 * 5 << endl;

        file.close();
    }

    if(file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        QTextStream in(&file);

        while(!in.atEnd())
        {
            QString s = in.readLine();
            qDebug() << s;
        }

        file.close();
    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    text_stream_test("C:/Users/Administrator/Desktop/test.txt");

    return a.exec();
}

 运行结果如下图所示

QDataStream 使用示例

void data_stream_test(QString f)
{
    QFile file(f);

    if(file.open(QIODevice::WriteOnly))
    {
        QDataStream out(&file);

        out.setVersion(QDataStream::Qt_5_12);

        out << QString("liujie");
        out << QString("Result: ");
        out << 3.14;

        file.close();
    }
    if(file.open(QIODevice::ReadOnly))
    {
        QDataStream in(&file);

        QString s = "";
        QString result = "";
        double exp = 0;

        in.setVersion(QDataStream::Qt_5_12);

        in >> s;
        in >> result;
        in >> exp;

        file.close();

        qDebug() << s;
        qDebug() << result;
        qDebug() << exp;

    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    data_stream_test("C:/Users/Administrator/Desktop/test.txt");

    return a.exec();
}

 运行结果如下图所示

不同 Qt 版本的数据流文本格式可能不同

void setVersion(int v)    // 设置读写版本号

int version() const         // 获取读写版本号

当数据流文件可能在不同版本的 Qt 程序间传递数据时,需要考虑版本问题! 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值