一、文本文件的读写
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()函数将字节数组内容写入文件。
标签:文件,Qt,QFile,文件系统,fileName,QString,file,QIODevice From: https://www.cnblogs.com/TechNomad/p/17743213.html