当前位置: 首页 > news >正文

【qt】文件类(QFile)

很高兴你能看到这篇文章,同时我的语雀文档也更新了许多嵌入式系列的学习笔记希望能帮到你 :
https://www.yuque.com/alive-m4b9n

目录

  • QFile 主要功能
  • QFile 操作步骤
  • QFile 其他常用函数
  • 案例分析及实现
    • 功能一实现:打开文件并显示
    • 功能二实现:另存为

QFile 是 Qt 提供的一个用于文件操作的类,继承自 QIODevice ,用于处理文件的读取、写入、删除等操作。

使用前需要引入头文件

QFile 主要功能

  • 打开文件
  • 读取数据
  • 写入数据
  • 删除文件
  • 检查文件状态
  • 复制和重命名文件

QFile 支持文本和二进制模式,可以用 QTextStreamQDataStream 进行高效的文件操作。

QFile 操作步骤

1️⃣ 创建 QFile 对象

//构造函数
QFile(const QString &name, QObject *parent)
QFile(QObject *parent)
QFile(const QString &name)---------示例--------------
QFile file("test.txt");

2️⃣ 调用 open() 以指定模式打开文件

 bool open(FILE *fh, QIODevice::OpenMode mode,  //通过文件路径打开QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)bool open(int fd, QIODevice::OpenMode mode, 	//通过fd文件描述符打开QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)------------------示例-----------------
QFile file("test.txt");
file.open(QIODevice::ReadWrite | QIODevice::Text);

打开模式如下,需要多个模式时用 |隔开

模式描述
ReadOnly只读模式
WriteOnly只写模式
ReadWrite读写模式
Append追加模式(不会覆盖已有内容)
Text以文本模式打开(自动转换换行符)
Truncate清空文件内容

3️⃣ 文件操作:读或者写

//读
QByteArray QIODevice::read(qint64 maxSize) //读取最大maxsize的数据
QByteArray QIODevice::readAll()  //读取文件所有数据,返回QByteArray数组
//写
qint64 write(const QByteArray &byteArray) //QByteArray 数据
qint64 write(const char *data, qint64 maxSize)  //char* 指针,数据大小----------示例-----------
QFile file("example.txt");
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {QByteArray content = file.readAll();qDebug() << "文件内容:\n" << content;file.close();
}

4️⃣ 关闭

void QFileDevice::close()

QFile 其他常用函数

类别函数作用示例代码
文件基本操作exists()判断文件是否存在if (file.exists()) qDebug() << "文件存在"
remove()删除文件file.remove();
copy(src, dst)复制文件QFile::copy("test.txt", "backup.txt");
rename(old, new)重命名/移动文件file.rename("new_name.txt");
flush()刷新缓冲区file.flush();
文件信息size()获取文件大小(字节)qDebug() << file.size();
fileName()获取文件名(可能是相对路径)qDebug() << file.fileName();
absoluteFilePath()获取文件的绝对路径qDebug() << QFileInfo(file).absoluteFilePath();
permissions()获取文件权限qDebug() << file.permissions();
setPermissions()修改文件权限file.setPermissions(QFileDevice::ReadOwner)
读写文件isReadable()是否可读if (file.isReadable()) qDebug() << "可读";
isWritable()是否可写if (file.isWritable()) qDebug() << "可写";
文件状态isOpen()判断文件是否已打开if (file.isOpen()) qDebug() << "文件已打开";
isWritable()判断文件是否可写if (file.isWritable()) qDebug() << "文件可写";
handle()获取底层文件句柄int fd = file.handle();

案例分析及实现

需求

  • 打开文件对话框,获取文件路径名,然后通过文件操作将文件内容显示到输入框上
  • 点击另存为按钮可以保存当前文件到其他地方去。

功能一实现:打开文件并显示

思路

1️⃣ 打开文件选择对话框QFileDialog::getOpenFileName

2️⃣ 获取用户选择的文件路径

3️⃣ 使用 QFile 读取文件内容 4️⃣ 将内容显示到 QTextEdit

mainwindow.h

private slots:
void on_openButton_clicked();  // 打开文件
void on_saveAsButton_clicked(); // 另存为private:
Ui::MainWindow *ui;
QString currentFilePath;  // 存储当前文件路径

mainwindow.cpp

//打开文件
void MainWindow::on_openButton_clicked()
{//打开文件对话框,获取文件路径QString filePath = QFileDialog::getOpenFileName(this,"选择文件","","文本文件(*.txt);;所有文件(*.*)");if(filePath.isEmpty()){qDebug()<<"未选择文件";return;}qDebug() << "选择的文件路径:" << filePath;currentFilePath = filePath; //记录当前的文件路径//打开文件QFile file(filePath);if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){qDebug()<<"文件打开失败"<<file.errorString();//输出错误信息return;}//读取文件内容QTextStream in(&file);QString fileContent = in.readAll();file.close();//显示到QtextEdit上ui->textEdit->setText(fileContent);
}

效果

功能二实现:另存为

mainwindow.cpp

// 另存为
void MainWindow::on_saveAsButton_clicked()
{// 打开文件对话框,获取保存路径QString saveFilePath = QFileDialog::getSaveFileName(this, "另存为", "","文本文件 (*.txt);;所有文件 (*.*)");if (saveFilePath.isEmpty()) {qDebug() << "未选择保存路径";return;}qDebug() << "保存文件路径:" << saveFilePath;// 打开文件QFile file(saveFilePath);if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {qDebug() << "文件保存失败:" << file.errorString();return;}// 获取 QTextEdit 中的内容QString content = ui->textEdit->toPlainText();// 写入文件QTextStream out(&file);out << content;file.close();qDebug() << "文件保存成功";
}

效果


http://www.mrgr.cn/news/96333.html

相关文章:

  • 【AI插件开发】Notepad++插件开发实践:从基础交互到ScintillaCall集成
  • 【数据结构】栈 与【LeetCode】20.有效的括号详解
  • Linux修改默认shell为zsh
  • Android 设备实现 adb connect 连接的步骤
  • Pycharm(七):几个简单案例
  • udp通信(一)
  • Oracle 23ai Vector Search 系列之2 ONNX(Open Neural Network Exchange)
  • 项目-苍穹外卖(十六) Apache ECharts+数据统计
  • 在 React 中,组件之间传递变量的常见方法
  • apache连接池机制讨论
  • Windows 我的世界 Minecraft 服务器搭建,Fabric 模组搭建教程(内网穿透)
  • 1.2-WAF\CDN\OSS\反向代理\负载均衡
  • 51c嵌入式~MOS~合集1
  • 数据库理论基础
  • 为什么使用Flask + uWSGI + Nginx 部署服务?
  • C笔记20250325
  • EF Core 乐观并发控制(并发令牌)
  • Flask项目部署:Flask + uWSGI + Nginx
  • Numpy用法(二)
  • Python每日一题(7)