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; }
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