[ Qt ] | 与系统相关的操作(三):QFile介绍和使用
目录
之前的操作文件的方式
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,可以查看里面提供的所有功能。