龙空技术网

从零开始学Qt(51):QFile读写文本文件

未来奇兵 193

前言:

眼前小伙伴们对“html读文件”大体比较注重,你们都需要学习一些“html读文件”的相关文章。那么小编在网上搜集了一些关于“html读文件””的相关资讯,希望看官们能喜欢,咱们快快来了解一下吧!

文件的读写是很多应用程序具有的功能,甚至某些应用程序就是围绕着某一种格式文件的处 理而开发的,所以文件读写是应用程序开发的一个基本功能。

文本文件是指以纯文本格式存储的文件,例如用Qt Creator编写的C++程序的头文件(.h文件)和源程序文件(.cpp文件),HTML和XML文件也是纯文本文件,只是其读取之后需要对内容进行解析之后再显示。

Qt提供了两种读写纯文本文件的基本方法,一种是用QFile类的IODevice读写功能直接进行读写,另—种是利用QFile和QTextStream结合起来,用流(stream)的方法进行文件读写。

本文以实例的方式演示了利用QFile直接读写文本文件,其运行时窗口如下图所示。实例不仅演示了如何打开文本文件,还有文件保存功能。

QFiIe读取文本文件

QFile类是直接与IO设备打交道,进行文件读写操作的类,使用QFile可以直接打开或保存文本文件。工具栏上的“QFile打开”按钮用QFile类的功能直接打开文本文件,按钮的槽函数及相关函数的代码如下:

void MainWindow::on_actionOpen_triggered(){ //打开文件  QString curPath=QDir::currentPath();  QString dlgTitle="打开一个文件";  QString filter="程序文件(*.h *.cpp);;文本文件(*.txt);;所有文件(*.*)";  QString aFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);  if(aFileName.isEmpty())  	return;  openTextByIODevice(aFileName);}
bool MainWindow::openTextByIODevice(const QString &aFileName){//用IODevice方式打开文本文件  QFile aFile(aFileName);  if(!aFile.exists())//文件不存在  	return false;  if(!aFile.open(QIODevice::ReadOnly | QIODevice::Text))  	return false;  ui->textEditDevice->setPlainText(aFile.readAll());  aFile.close();  return true;}

自定义函数openTextByIODevice()实现文本文件打开的功能。定义QFile对象变量aFile时将 文件名传递给它,检查文件存在后,通过open()函数打开文件。

QFile::open()函数打开文件时需要传递QIODevice::OpenModeFlag枚举类型的参数,决定文 件以什么方式打开,QIODevice::OpenModeFlag类型的主要取值如下。

QIODevice::ReadOnly:以只读方式打开文件,用于载入文件。QIODevice::WriteOnly:以只写方式打开文件,用于保存文件。QIODevice::ReadWrite:以读写方式打开。QIODevice::Append:以添加模式打开,新写入文件的数据添加到文件尾部。QIODevice::Truncate:以截取方式打开文件,文件原有的内容全部被删除。QIODevice::Text:以文本方式打幵文件,读取时“\n”被自动翻译为换行符,写入时字符串结束符会自动翻译为系统平台的编码,如Windows平台下是“\r\n”。

这些取值可以组合,例如QIODevice::ReadOnly | QIODevice::Text表示以只读和文本方式打 开文件。

将文件内容全部读出并设置为QPlainTextEdit组件的内容只需一条语句:

ui->textEditDevice->setPlainText(aFile.readAll());

文件内容读取结束后,需要调用QFile::close()函数关闭文件。

QFile保存文本文件

工具栏上的“QFile另存”按钮用QFile类的功能将QPlaintextEdit组件中的文本保存为一个文本文件,实现代码如下:

void MainWindow::on_actionSave_triggered(){  QString curPath=QDir::currentPath();  QString dlgTitle="另存为一个文件";  QString filter=".h文件(*.h);;C++文件(*.cpp);;所有文件(*.*)";  QString aFileName=QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);  if(aFileName.isEmpty())  	return;  saveTextByIODevice(aFileName);}
bool MainWindow::saveTextByIODevice(const QString &aFileName){ //用IODevice方式保存文本文件  QFile aFile(aFileName);  if(!aFile.open(QIODevice::WriteOnly | QIODevice::Text))  	return false;  QString str=ui->textEditDevice->toPlainText();//整个内容作为字符串  QByteArray strBytes=str.toUtf8();//转换为字节数组  aFile.write(strBytes,strBytes.length()); //写入文件  aFile.close();  return true;}

自定义函数saveTextBylODevice()实现文件保存功能,为了保存文件,用open()打开文件时, 使用的模式是 QIODevice::WriteOnly | QIODevice::Text。使用 WriteOnly 隐含着 Truncate,即删除文件原有内容。

首先将QPlaintextEdit组件textEditDevice的文本导出为一个字符串,将QString类的toUtf8() 函数转换为UTF8编码的字节数组strBytes,然后调用QFile::write()函数将字节数组内容写入文件。

标签: #html读文件 #qt调用命令行 readall