目录
之前的操作文件的方式
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,可以查看里面提供的所有功能。