当前位置: 首页 > 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() << "文件保存成功";
}

效果

相关文章:

  • unity中Xcharts图表鼠标悬浮表现异常
  • idea中如何使用git
  • Redis为什么快?
  • 人工智能赋能美妆零售数字化转型:基于开源AI大模型的S2B2C商城系统构建
  • Ruby 简介
  • Docker Compose 基础知识
  • Linux云计算SRE-第二十一周
  • Java课程设计(双人对战游戏)持续更新......
  • 方法指南:利用边缘计算实现低延迟直播流媒体服务
  • 【STM32】GPIO
  • GMII 接口
  • 泛目录程序,无极泛目录是如何搭建强大站群的?
  • mac部署CAT监控服务
  • 构建可扩展、可靠的网络抓取、监控和自动化应用程序的终极指南
  • Go常用的设计模式
  • C++:动态内存管理(含五大内存分区区分)详解
  • F.binary_cross_entropy与sklearn.metric.log_loss的比较
  • 排序算法(插入,希尔,选择,冒泡,堆,快排,归并)
  • 智慧养老时代:老年人慢性病预防与生活方式优化
  • vscode在使用 alt + tab 切换程序窗口时,输入法总是自动变为中文模式
  • 安徽安庆市委书记张祥安调研假日经济和旅游安全工作
  • 视频公开课上线之后,北大成为多少人未曾谋面的母校?
  • 全球最大汽车板供应商宝钢股份:汽车工业加速转型中材料商如何共舞?
  • 看纪录片抵学分,贺桂梅:纪录片是对抗低质碎片信息的好媒介
  • “五一”看什么?这里有一份申城视听指南
  • 李公明︱一周书记:数字文化的乌托邦精神与……算法时代的生存指南