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