(十四)QFile操作,QByteArray,文件流操作,QTextStream,QDataStream,QFileInfo, QIODevice

QFile f

1.readall

#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QTextCodec>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->selectFile, &QPushButton::clicked, this, [=](){
        QString filename = QFileDialog::getOpenFileName(this,"open file","d:\");
        if (filename.isEmpty()) {
            QMessageBox::warning(this,"warnnig","select file failed");
            return;
        }
        ui->lineEdit->setText(filename);

        // 创建文件对象
        // 默认读取文件格式:utf8
        QFile file(filename);
        //QTextCodec* codec = QTextCodec::codecForName("gbk");
        // 指定打开方式
        bool isOk = file.open(QFile::ReadOnly);
        if (!isOk) {
            QMessageBox::critical(this,"ERROR","file open failed");
            return;
        }
        // 读文件
        QByteArray array = file.readAll();
        // 显示到文本框
        //ui->textEdit->setText(codec->toUnicode(array));
        ui->textEdit->setText(array);
        // 关闭文件
        file.close();
    });

}

Widget::~Widget()
{
    delete ui;
}

2.readline

#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QTextCodec>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->selectFile, &QPushButton::clicked, this, [=](){
        QString filename = QFileDialog::getOpenFileName(this,"open file","d:\");
        if (filename.isEmpty()) {
            QMessageBox::warning(this,"warnnig","select file failed");
            return;
        }
        ui->lineEdit->setText(filename);

        // 创建文件对象
        // 默认读取文件格式:utf8
        QFile file(filename);
        //QTextCodec* codec = QTextCodec::codecForName("gbk");
        // 指定打开方式
        bool isOk = file.open(QFile::ReadOnly);
        if (!isOk) {
            QMessageBox::critical(this,"ERROR","file open failed");
            return;
        }
        // 读文件
        QByteArray array;
        while(!file.atEnd()) {
            array += file.readLine();
        }
        // 显示到文本框
        //ui->textEdit->setText(codec->toUnicode(array));
        ui->textEdit->setText(array);
        // 关闭文件
        file.close();
    });

}

Widget::~Widget()
{
    delete ui;
}
readline

QByteArray

https://blog.csdn.net/ecourse/article/details/80575691

QByteArray就是一个字节数组。类似于unsigned char[],什么数据都能保存。
而QString是一个字符串,其内部其实也是unsigned char[],但是这个数组是用于保存unicode字符的数组。对QString进行操作的时候,是按照字符串的角度来进行调用的。QString自动完成了一些字符串到字节数组的转换工作。

文件流

1、文本流 QTextStream

操作的数据类型:基础数据类型:int ,float ,string

侧重于文本的读写

属于轻量级的流操作

#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QTextCodec>
#include <QTextStream>
#include <QDataStream>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->selectFile, &QPushButton::clicked, this, [=](){
        QString filename = QFileDialog::getOpenFileName(this,"open file","d:\");
        if (filename.isEmpty()) {
            QMessageBox::warning(this,"warnnig","select file failed");
            return;
        }
        ui->lineEdit->setText(filename);

        // 创建文件对象
        // 默认读取文件格式:utf8
        QFile file(filename);
        //QTextCodec* codec = QTextCodec::codecForName("gbk");
        // 指定打开方式
        bool isOk = file.open(QFile::ReadOnly);
        if (!isOk) {
            QMessageBox::critical(this,"ERROR","file open failed");
            return;
        }

        QTextStream stream(&file); // 设置IO设备给流对象
        QString array;
        while(!stream.atEnd()) {
            array += stream.readLine();
        }

        // 显示到文本框
        //ui->textEdit->setText(codec->toUnicode(array));
        ui->textEdit->setText(array);
        // 关闭文件
        file.close();
    });

}

Widget::~Widget()
{
    delete ui;
}
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QTextCodec>
#include <QTextStream>
#include <QDataStream>
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    QFile f("D:\aaa.txt");
    f.open(QFile::WriteOnly);
    QTextStream txt(&f);
    // 写文件
    txt << QString("hello; world") << 123456;
    f.close();

    QString buf;
    f.open(QFile::ReadOnly);
    txt.setDevice(&f);
    txt >> buf;
    qDebug() << buf.toUtf8().data(); //hello;
} 
Widget::
~Widget() { delete ui; }

2、数据流 QDataStream

操作的数据类型:QImage,QPoint,QRect,不依赖于平台

侧重于数据格式和类型

QTextStream 能做的事,QDataStream 都能做

可以对特定格式的数据类型进行完美的输入输出

几乎Qt 支持的所有数据类型都可以使用QDataStream 进行操作

#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QTextCodec>
#include <QTextStream>
#include <QDataStream>
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

//    QFile f("D:\aaa.txt");
//    f.open(QFile::WriteOnly);
//    QTextStream txt(&f);
//    // 写文件
//    txt << QString("hello; world") << 123456;
//    f.close();

//    QString buf;
//    f.open(QFile::ReadOnly);
//    txt.setDevice(&f);
//    txt >> buf;
//    qDebug() << buf.toUtf8().data();
    QFile f("D:\aaa.txt");
    f.open(QFile::WriteOnly);
    QDataStream txt(&f);
    // 写文件
    txt << QString("hello; world") << 123456;
    f.close();

    QString buf;
    int num;
    f.open(QFile::ReadOnly);
    txt.setDevice(&f);
    txt >> buf >> num;
    qDebug() << buf.toUtf8().data() << num; // hello; world 123456
}

Widget::~Widget()
{
    delete ui;
}
    QImage image("d:\up.png");
    QByteArray arr;
    QDataStream ss(&arr,QIODevice::ReadWrite);
    ss << image;
    qDebug() << arr;

QFileInfo

#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QTextCodec>
#include <QTextStream>
#include <QDataStream>
#include <QDebug>
#include <QFileInfo>
#include <QDateTime>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QFileInfo info("d:\up.png");
    qDebug() << info.size();
    qDebug() << info.path();
    qDebug() << info.lastModified().toString("yyyy-mm-dd");
}

Widget::~Widget()
{
    delete ui;
}

15378

"d:/"

"2018-28-28"

QIODevice

 

原文地址:https://www.cnblogs.com/xiangtingshen/p/10784109.html