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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM