Qt 之 QDataStream 和 QTextStream

文件系统

在这里插入图片描述

文件系统分类

  • 顺序访问设备:
    从头走到尾,从第一个字节开始访问,直到最后一个字节,中途不能返回去读取上一个字节

  • 随机访问设备:
    可以访问任意位置任意次数,还可以使用QIODevice::seek()函数来重新定位文件访问位置指针

QFile

QFile提供了从文件中读取和写入数据的能力。
我们通常会将文件路径作为参数传给QFile的构造函数。不过也可以在创建好对象最后,使用setFileName()来修改。


 QString path = QFileDialog::getOpenFileName(this, "open", "../"  );
 QFile file;
 file.setFileName(path);
 bool isOk = file.open(QIODevice::ReadOnly);
if(true == isOk)
{

}
file.close();

QTextStream

QTextStream::readLine()			//读取一行
QTextStream::readAll()			//读取所有文本
void Widget::writeData()
{
    QFile file;
    file.setFileName("../demo.txt");

    bool isOk = file.open(QIODevice::WriteOnly);
    if(true == isOk)
    {
        QTextStream stream(&file);
        //指定编码
        stream.setCodec("UTF-8");

        //往文件写字符串,"<<"操作符重载
        stream << QString("Hello world") << 250;        //当做整个字符串写入

        file.close();
    }
}

void Widget::readData()
{
    QFile file;
    file.setFileName("../demo.txt");

    bool isOk = file.open(QIODevice::ReadOnly);
    if(true == isOk)
    {
        QTextStream stream(&file);
        //指定编码
        stream.setCodec("UTF-8");
        QString str;
        //int a;
        //stream >> str >> a;       //读文件
                                    //遇到空格会被截断,不在继续读了。
                                    //所以不推荐用操作符方式读
        QByteArray array;
        while(false == stream.atEnd())
        {
            str = stream.readAll();
            qDebug()<<str;
            array.append(str.toUtf8());
            qDebug()<<array;
        }

        //cout << str.toUtf8().data() << a;
        qDebug()<<array;
        file.close();

    }
}

QDataSteram

    1. QDataStream提供了基于QIODevice的二进制数据的序列化。数据流是一种二进制流,这种流完全不依赖于底层操作系统、CPU 或者字节顺序(大端或小端)。
    1. 当使用QDataStream 写入的时候,实际上会要在写入的内容前面,额外添加一个这段内容的长度值。而文本形式写入的数据,是没有数据之间的分隔的。

QIODevice

QFileInfo

QByteArray

QByteArray 可以当做一段内存。

QImage image("..\\Image\\smile.png");
QByteArray array;
QDataStream  stream(&array, QIODevice::ReadWrite);

stream << image //很多文件都可以通过QDataStream 存到内存里面

QBuffer

  • QBuffer类是一个操作QByteArray的输入/输出设备。
  • QBuffer是用来读写内存缓存的。可以被打开或关闭。
  • 它通常与QTextStream或QDataStream一起使用。
  • QBuffer有一个相关联的QByteArray用来存储缓冲数据。缓冲的大小(size())会根据所写的数据自动调整。
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    QByteArray array;
    QBuffer memFile(&array); //创建内存文件
    memFile.open(QIODevice::WriteOnly);

    memFile.write("11111111111111111");
    memFile.write("22222222222222222222");

    memFile.close();

    qDebug() << memFile.buffer();
    qDebug() << "array" << array;


    QBuffer memFile1;
    memFile1.open(QIODevice::WriteOnly);
    QDataStream stream(&memFile1);
    stream << QString("测试") << 250;
    memFile1.close();

    qDebug() <<  memFile1.buffer();  //"\x00\x00\x00\x04mK\x8B\xD5\x00\x00\x00\xFA"

    memFile1.open(QIODevice::ReadOnly);
    QDataStream in;
    in.setDevice(&memFile1);
    QString str;
    int a;
    in >> str >> a;
    memFile1.close();

    qDebug() << str.toUtf8().data() << a;

}

QProcess

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值