[ Qt ] | 与系统相关的操作(三):QFile介绍和使用

发布于:2025-06-10 ⋅ 阅读:(15) ⋅ 点赞:(0)

目录

之前的操作文件的方式

Qt中的文件操作简介

QFile

打开

关闭

一个例子来说明

QFileInfo


之前的操作文件的方式

C语言中,fopen 打开文件,fread fwrite 读写文件,fclose 关闭文件。

C++中,fstream 打开文件,<< >> 读写文件,close 关闭文件。

Linux中,open 打开文件,read write 读写文件,close 关闭文件。

Qt中也提供了一套文件操作,开发中也可以使用C语言,C++中的文件操作的方式。

Qt中的文件操作简介

Qt中提供了QFile类,其中包含成员函数用于打开,读,写,关闭文件。

QFile类继承自QFileDevice,QFileDevice继承自QIODevice。

QTemporaryFile,创建一个临时文件,这个对象销毁,这个临时文件就被删除了。

QSaveFile用于写入大量的数据的场景:我们在写文件的时候,往往是清空旧文件内容,再写,假如说写的过程中出错了,那么旧的文件就没了,新的文件还用不了。所以我们写一个文件的时候,会自动把文件写到一个临时文件中(不破坏原来的文件),当全部写完的时候,用新文件替换旧文件。

QFile

打开

open,有几个常见的版本,可以在Qt的帮助文档中查看

如果使用上面的这两个,就要配合C语言的方式或者系统文件描述符的方式,不是很常用

这个更加常用一点,在构造函数中,指定了路径之后,此时可以直接通过这个版本的open打开即可。

打开方式:

read / readLine / readAll

这里的QByteArray是一个字节数组,可以很容易转化成QString。

write

关闭

close

这里的关闭本质就是释放文件描述符表中的表项

一个例子来说明

1. 通过代码的方式来构建界面

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 获取菜单栏
    QMenuBar* menubar = this->menuBar();
    // 添加菜单
    QMenu* menu = new QMenu("文件");
    menubar->addMenu(menu);
    // 添加菜单项
    QAction* action1 = new QAction("打开");
    QAction* action2 = new QAction("保存");
    menu->addAction(action1);
    menu->addAction(action2);

    // 指定一个输入框
    edit = new QPlainTextEdit();
    // 设置字体大小
    QFont font;
    font.setPixelSize(20);
    edit->setFont(font);

    this->setCentralWidget(edit);

    // 连接Action的信号槽
    connect(action1, &QAction::triggered, this, &MainWindow::action1Handle);
    connect(action2, &QAction::triggered, this, &MainWindow::action2Handle);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::action1Handle()
{
    // 弹出一个“打开文件”的对话框,让用户选择打开那个文件
    QString path = QFileDialog::getOpenFileName(this);

    // 把文件名显示到状态栏里
    QStatusBar* statusBar = this->statusBar();
    statusBar->showMessage(path);

    // 根据用户选择的文件去构造一个QFile对象
    QFile file(path);
    bool ret = file.open(QIODevice::ReadOnly);
    if (!ret)
    {
        statusBar->showMessage(path + " 打开失败!");
        return;
    }
    QString text = file.readAll();

    file.close();

    edit->setPlainText(text);
}

void MainWindow::action2Handle()
{
    // 弹出保存文件的对话框
    QString path = QFileDialog::getSaveFileName(this);
    // 在状态栏中显示文件名
    QStatusBar* statusBar = this->statusBar();
    statusBar->showMessage(path);
    // 根据用户选择的文件去构造一个QFile对象
    QFile file(path);
    bool ret = file.open(QIODevice::WriteOnly);
    if (!ret)
    {
        statusBar->showMessage(path + " 打开失败!");
        return;
    }
    // 写文件
    const QString& text = edit->toPlainText();
    file.write(text.toUtf8()); //toUtf8()可以将QString转换为QByteArray
    // 关闭文件
    file.close();
}

QFileInfo

获取Qt的文件的相关属性,比如说文件的后缀是什么?文件是普通文件还是目录。

对着QFileInfo按F1,可以查看里面提供的所有功能。