1. QFile文件类
QFile
- 构造: QFile objname(path)
- 打开文件: objname.open(QFileDevice::ReadOnly | QFileDevice::Append); // QIODevice则代表的是所有IO设备
- 读取所有: objname.readAll()
- 按行读取: objname.readLine() 返回一个QByteArray数组
- 判断是否到末尾: objname.atEnd()
- 写入: objname.write(xxx)
- 关闭文件: objname.close()
来看一个例子:
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QDir>
#include <QMessageBox>
#include <QFile>
#include <QTextCodec>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QString curr = QDir::currentPath();connect(ui->btnChoose, &QPushButton::clicked, [=](){QString path = QFileDialog::getOpenFileName(this, "打开文件", curr);if (path.isEmpty())QMessageBox::warning(this, "警告", "打开失败");else {ui->editFileName->setText(path);QFile file(path);file.open(QFileDevice::ReadOnly | QFileDevice::Append); // QIODevice::ReadOnlyQByteArray array;while (!file.atEnd())array += file.readLine();//QByteArray byteArr = file.readAll();//QTextCodec *codec = QTextCodec::codecForName("utf8");//QString content = QString::fromStdString(byteArr.toStdString());//ui->txtEdit->setText(codec->toUnicode(byteArr));ui->txtEdit->setText(array);file.write("哈哈哈哈哈哈哈");file.close();}});
}
2. QFileInfo文件信息类
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QDir>
#include <QMessageBox>
#include <QFile>
#include <QTextCodec>
#include <QDebug>
#include <QFileInfo>
#include <QString>
#include <QDateTime>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QString curr = QDir::currentPath();connect(ui->btnChoose, &QPushButton::clicked, [=](){QString path = QFileDialog::getOpenFileName(this, "打开文件", curr);if (path.isEmpty())QMessageBox::warning(this, "警告", "打开失败");else {ui->editFileName->setText(path);QFile file(path);file.open(QFileDevice::ReadOnly | QFileDevice::Append); // QIODevice::ReadOnlyQByteArray array;while (!file.atEnd())array += file.readLine();//QByteArray byteArr = file.readAll();//QTextCodec *codec = QTextCodec::codecForName("utf8");//QString content = QString::fromStdString(byteArr.toStdString());//ui->txtEdit->setText(codec->toUnicode(byteArr));ui->txtEdit->setText(array);file.write("哈哈哈哈哈哈哈");QFileInfo info(path);qDebug() << "名称: " << info.fileName();qDebug() << "文件大小: " << info.size();qDebug() << "后缀名: " << info.suffix();qDebug() << "路径: " << info.filePath();qDebug() << "创建日期: " << info.created().toString("yyyy-MM-dd HH:mm:ss");qDebug() << "修改日期: " << info.lastModified().toString("yyyy/MM/dd HH:mm:ss");file.close();}});
}
- QFileInfo类的fileName()方法可以获取文件名
- size()方法可以获取大小(以字节为单位)
- 后缀名suffix()方法可以获得
- 路径通过filePath()可以获取。
- 创建日期: created()方法
- 修改日期: lastModified()方法
3. 文本流与数据流
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QDir>
#include <QMessageBox>
#include <QFile>
#include <QTextCodec>
#include <QDebug>
#include <QFileInfo>
#include <QString>
#include <QDateTime>
#include <QTextStream>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QFile file("a.txt");file.open(QFileDevice::WriteOnly);QTextStream stream(&file);stream << QString("Hello, world!") << 1234567;file.close();file.open(QFileDevice::ReadOnly);QString content;stream >> content;qDebug() << content;content = stream.readAll();qDebug() << content;file.close();
}
文本流方式对文本文件进行IO操作。
- 可以通过>>运算符来读取内容,但是这样读取只能读到遇到空格为止
- 也可以通过readAll()方法可以一次性全部读取
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QFile file("a.txt");file.open(QFileDevice::WriteOnly);QDataStream stream(&file);stream << QString("Hello, idiot!") << 1234567;file.close();file.open(QFileDevice::ReadOnly);QString strContent;stream >> strContent;qDebug() << strContent;
}
数据流方式对文件进行IO操作,数据流方式是二进制的,所以文件会无法打开,但是可以通过QDataStream进行读取写入
(完)