Qt开发之路22---文本文件读写 QTextStream

一:概述

  • 上一节介绍了有关二进制文件的读写。二进制文件比较小巧,却不是人可读的格式。而文本文件是一种人可读的文件。为了操作这种文件,我们需要使用QTextStream类。QTextStream和QDataStream的使用类似,只不过它是操作纯文本文件的。
  • QTextStream会自动将 Unicode 编码同操作系统的编码进行转换,这一操作对开发人员是透明的。它也会将换行符进行转换,同样不需要自己处理。QTextStream使用 16 位的QChar作为基础的数据存储单位,同样,它也支持 C++ 标准类型,如 int 等。实际上,这是将这种标准类型与字符串进行了相互转换。
  • QTextStream同QDataStream的使用基本一致

二:写

#include <QApplication>
#include <QDebug>
#include <QFile>
#include <QTextStream>

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

    QFile file("test.txt");
    if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)){
        qDebug()<<"open file failed";
        return -1;
    }

    QTextStream out(&file);
    out << "the number is ";
    out << qint32(123);

    file.close();

    return a.exec();
}
  • 在open()函数中增加了QIODevice::Truncate打开方式。我们可以从下表中看到这些打开方式的区别:
    QIODevice::NotOpen 未打开
    QIODevice::ReadOnly 以只读方式打开
    QIODevice::WriteOnly 以只写方式打开
    QIODevice::ReadWrite 以读写方式打开
    QIODevice::Append 以追加的方式打开,新增加的内容将被追加到文件末尾
    QIODevice::Truncate 以重写的方式打开,在写入新的数据时会将原有数据全部清除,游标设置在文件开头。
    QIODevice::Text 在读取时,将行结束符转换成 \n;在写入时,将行结束符转换成本地格式,例如 Win32 平台上是 \r\n
    QIODevice::Unbuffered 忽略缓存
    在这里使用了QFile::WriteOnly | QIODevice::Truncate,也就是以只写并且覆盖已有内容的形式操作文件。注意,QIODevice::Truncate会直接将文件内容清空。

三:读

虽然QTextStream的写入内容与QDataStream一致,但是读取时不一样:

#include <QApplication>
#include <QDebug>
#include <QFile>
#include <QTextStream>

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

    QFile file("test.txt");
    if(!file.open(QIODevice::ReadOnly)){
        qDebug()<<"open file failed";
        return -1;
    }

    QTextStream in(&file);
    QString str;
    qint32 num = 0;
    in >> str;
    in >> num;
    qDebug()<<str<<num;

    file.close();

    return a.exec();
}
"the" 0
  • 在使用QDataStream的时候,这样的代码很方便,但是使用了QTextStream时却有所不同:读出的时候,“the” 0。这是因为当使用QDataStream写入的时候,实际上会在要写入的内容前面,额外添加一个这段内容的长度值。而以文本形式写入数据,是没有数据之间的分隔的
  • 因此,使用文本文件时,很少会将其分割开来读取,而是使用诸如使用:
   QTextStream::readLine()	//读取一行
   QTextStream::readAll() //读取所有文本
  • 再对获得的QString对象进行处理。
#include <QApplication>
#include <QDebug>
#include <QFile>
#include <QTextStream>

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

    QFile file("test.txt");
    if(!file.open(QIODevice::ReadOnly)){
        qDebug()<<"open file failed";
        return -1;
    }

    QTextStream in(&file);
    QString str;
    qint32 num = 0;

    str = in.readAll();
    qDebug()<<str;

    file.close();

    return a.exec();
}
"the number is 123"

默认情况下,QTextStream的编码格式是 Unicode,如果我们需要使用另外的编码,可以使用:

stream.setCodec("UTF-8");

上一篇:Qt开发之路21—二进制文件读写 QDataStream
下一篇:Qt开发之路23—绘图 QPainter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值