一、文本文件的读写
1.QFile读取文本文件
QFile类是直接与IO设备打交道,进行文件读写操作的类,使用QFile可以直接打开或保存文本文件。
示例代码:
void MainWindow::on_btn_clicked()
{
QString curPath = QDir::currentPath();
QString dlgTitle = "打开一文件";
QString filter = "程序文件(*.h *.cpp);;文本文件(*.txt);;所有文件(*.*)";
QString fileName = QFileDialog::getOpenFileName(this, dlgTitle, curPath, filter);
if (fileName.isEmpty()) {
return;
}
QFile file(fileName);
if (!file.exists()) {
qDebug() << "文件不存在";
return;
}
if (!file.open(QIODevice::ReadOnly |QIODevice::Text)) {
qDebug() << "文件打开失败";
return;
}
m_pTextEdit->setPlainText(file.readAll());
file.close();
}
定义QFile对象变量fileName时将文件名传递给它,检查文件存在后,通过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表示只读和文本方式打开文件;文本内容读取结束后,需要调用QFile::close()函数关闭文件。
2.QFile写入文本文件
void MainWindow::on_btn_clicked()
{
QString curPath = QDir::currentPath();
QString dlgTitle = "另存为一个文件";
QString filter = "程序文件(*.h *.cpp);;文本文件(*.txt);;所有文件(*.*)";
QString fileName = QFileDialog::getSaveFileName(this, dlgTitle, curPath, filter);
if (fileName.isEmpty()) {
return;
}
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
qDebug() << "文件打开失败";
return;
}
QString str = m_pTextEdit->toPlainText(); //整个内容作为字符串
QByteArray strBytes = str.toUtf8(); //转换为字节数组
qint64 ret = file.write(strBytes, strBytes.length()); //写入文件
if (ret != strBytes.length()) {
qDebug() << "文件写入失败";
}
file.close();
}
为了保存文件,用open()打开文件时,使用的模式是QIODevice::WriteOnly | QIODevice::Text。使用WriteOnly隐含着Truncate,即删除文件原有内容,并将QString类型的文本内容通过toUtf8()函数转换为UTF8编码的字节数组strBytes,然后调用QFile::write()函数将字节数组内容写入文件。