文件系统是应用程序必不可少的部分。Qt作为一个通用开发库,提供了跨平台的文件操作能力。Qt通过 QIODevice 提供了对I/O设备的抽象,使这些设备具有读写字节块的能力。
在所有的I/O设备中,文件I/O是最重要的部分之一。QFile提供了从文件中读取和写入数据的能力。我们通常会将文件路径作为参数传给QFile的构造函数。不过也可以在创建好对象后,使用 setFileName()来修改。
QFile 主要提供了有关文件的各种操作,比如打开文件、关闭文件、刷新文件等。我们可以使用 QDataStream或 QTextStream类来读写文件,也可以使用 QIODevice类提供的 read()、readLine()、readAll()以及 write()这样的函数。值得注意的是,有关文件本身的信息,比如文件名、文件所在目录的名字等,则是通过 QFileInfo获取,而不是自己分析文件路径字符串。
GitHub源码仓库:Qt学习例程
例程功能执行过程:
按键关联消息槽,弹出文件对话框,打开文件,输出路径。
读内容有两种方式:(默认utf-8,可以指定格式gbk,不过很麻烦。)
file.readAll();,全部读取
file.readLine();,按行读,读到文件行尾。
打开后,别忘记关闭文件对象。
写文件。
按照指定的日期时间格式,输出文件创建日期 和最后修改日期。
打开文件的方式:
日期时间的格式编码方法:
GitHub源码仓库:Qt学习例程
#include "widget.h" #include "ui_widget.h" #include <QFileDialog> #include <QDebug> #include <QTextCodec> #include <QDateTime> Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); // 点击选取文件按钮,弹出文件对话框 connect(ui->pushButton, &QPushButton::clicked, [=](){ // 用打开的方式打开一个文件对话框 // 打印选中该的路径名称。参数:父对象,对话框标题,默认打开路径,过滤的文件格式 QString path = QFileDialog::getOpenFileName(this, "open", "../", "Text(*.txt);;souce(*.cpp *.h);;all(*.*)"); // 调试输出选择路径 qDebug() << path; // 将路径显示到 lineEdit ui->lineEdit->setText(path); // 指定操作文件格式,只能指定一种格式,所以指定gbk时读utf-8的会出错 //QTextCodec * codec = QTextCodec::codecForName("gbk"); // 读取txt内容,放入到 textEdit中 // QFile默认支持的格式是 utf-8 // 输入打开文件的文件路径 QFile file(path); // 打开方式:只读/只写/读写/追加 file.open(QIODevice::ReadOnly); // 全部读取 //QByteArray array = file.readAll(); // 按行读,追加到array,直到读到行尾 QByteArray array; while(!file.atEnd()) { array += file.readLine(); } ui->textEdit->setText(array); //ui->textEdit->setText(codec->toUnicode(array)); // 关闭文件对象 file.close(); // 用追加方式进行写文件 /*file.open(QIODevice::Append); file.write("aaaaaaaaa"); // 关闭文件对象 file.close();*/ // QFileInfo 文件信息类 QFileInfo info(path); qDebug() << "大小:" << info.size() << "Bytes 后缀名:" << info.suffix() << " 文件名称:" << info.fileName() << " 文件路径:" << info.filePath(); // 显示 创建日期 qDebug() << "创建日期:" << info.created().toString("yyyy/MM/dd hh:mm:ss"); qDebug() << "创建日期:" << info.birthTime().toString("yyyy/MM/dd hh:mm:ss"); // 显示 最后修改日期 qDebug() << "最后修改日期:" << info.metadataChangeTime().toString("yyyy/MM/dd hh:mm:ss"); qDebug() << "最后修改日期:" << info.lastModified().toString("yyyy/MM/dd hh:mm:ss"); }); } Widget::~Widget() { delete ui; }
文件对话框选择目录中的.txt文档,结果如下: