• (十四)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

     

  • 相关阅读:
    Windows下MySQL数据库备份脚本(二)
    pt-query-digest用法
    pt-online-schema-change 实例
    pt-kill使用
    pt-find 使用实例
    利用pt-deadlock-logger监控死锁
    pt-fifo-split使用
    bash{} 方法总结
    python psutil 模块
    Zabbix的安装与部署---问题处理(php65.6.28 mysqli 报错误 处理)
  • 原文地址:https://www.cnblogs.com/xiangtingshen/p/10784109.html
Copyright © 2020-2023  润新知