【QT】文件类(QFile)

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

目录

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

使用前需要引入头文件

QFile 主要功能

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

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

QFile 操作步骤

1️⃣ 创建 QFile 对象

cpp 复制代码
//构造函数
QFile(const QString &name, QObject *parent)
QFile(QObject *parent)
QFile(const QString &name)

---------示例--------------
QFile file("test.txt");

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

cpp 复制代码
 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️⃣ 文件操作:读或者写

cpp 复制代码
//读
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️⃣ 关闭

cpp 复制代码
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

cpp 复制代码
private slots:
void on_openButton_clicked();  // 打开文件
void on_saveAsButton_clicked(); // 另存为

private:
Ui::MainWindow *ui;
QString currentFilePath;  // 存储当前文件路径

mainwindow.cpp

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

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() << "文件保存成功";
}

效果

相关推荐
Acrelgq233 小时前
工厂能耗系统智能化解决方案 —— 安科瑞企业能源管控平台
大数据·人工智能·物联网
若水晴空初如梦4 小时前
QT聊天项目DAY06
开发语言·qt
刘卜卜&嵌入式5 小时前
C++_设计模式_观察者模式(Observer Pattern)
c++·观察者模式·设计模式
h汉堡5 小时前
C++入门基础
开发语言·c++·学习
XINVRY-FPGA5 小时前
XCZU7EG‑L1FFVC1156I 赛灵思XilinxFPGA ZynqUltraScale+ MPSoC EG
c++·嵌入式硬件·阿里云·fpga开发·云计算·fpga·pcb工艺
鄃鳕6 小时前
QSS【QT】
开发语言·qt
_GR6 小时前
2025年蓝桥杯第十六届C&C++大学B组真题及代码
c语言·数据结构·c++·算法·贪心算法·蓝桥杯·动态规划
全栈开发圈7 小时前
新书速览|OpenCV计算机视觉开发实践:基于Qt C++
qt·opencv·计算机视觉
mahuifa7 小时前
(7)VTK C++开发示例 --- 使用交互器
c++·vtk·cmake·3d开发
光算科技8 小时前
服务器在国外国内用户访问慢会影响谷歌排名吗?
运维·服务器·c++