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

【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.kler.cn/a/614076.html

相关文章:

  • 1、SQL注入攻击的防范
  • 1921.消灭怪物的最大数量
  • -JavaEE 应用Servlet 路由技术JDBCMybatis 数据库生命周期
  • Gateway实战(二)、负载均衡
  • 【Java】JVM
  • pytest-xdist 进行高效并行自动化测试
  • LeetCode hot 100—LRU缓存
  • SQL 通用表表达式(CTE )
  • MetInfo6.0.0目录遍历漏洞原理分析
  • C++11QT复习 (三)
  • QT mingw编译器使用gdb调试
  • 2025 年前端新趋势:拥抱 Web Component 与性能优化
  • aioredis.from_url函数详解
  • 7.1 分治-快排专题:LeetCode 75. 颜色分类
  • postgresql+patroni+etcd高可用安装
  • 微软开源 “Hyperlight Wasm”,将轻量级虚拟机技术扩展至 WASM
  • 使用ModbusRTU读取松下测高仪的高度
  • 微软和Linux
  • 深入理解MySQL中的脏读、幻读、不可重复读(附实战复现源码)
  • 【VSCode的安装与配置】