说明
当在qt中要进行文件的读写时,qt提供QFile类帮助我们进行文件的读写操作。这其中我们需要使用到open与write两个主要的方法。但如果使用write方法去写入文件并保存时,会出现无法保存为UTF-8的编码格式,下面是对open、write方法的介绍以及如何将数据保存为UTF-8的格式。
open
这里对open方法只进行一个简单的介绍,老规矩,先看一下官方文档中的说明:
[override virtual] bool QFile::open(QIODevice::OpenMode mode)
Reimplements: QIODevice::open(QIODevice::OpenMode mode).
Opens the file using OpenMode mode, returning true if successful; otherwise false.
The mode must be QIODevice::ReadOnly, QIODevice::WriteOnly, or QIODevice::ReadWrite. It may also have additional flags, such as QIODevice::Text and QIODevice::Unbuffered.
文档中说明open方法是一个支持重写的虚方法,所以其有多种重写实现,这里不一一展现。在使用open方法时,需要传入其所支持的模式标志。
write
write方法支持一个参数或两个参数
*qint64 QIODevice::write(const char data, qint64 maxSize)
qint64 QIODevice::write(const char *data)(This is an overloaded function.)
向文件中写入最多maxSize大小的data中的数据,成功写入会返回真实写入的字节大小,执行异常则返回-1。两个方法效果相同。
示例
需引入QFile库
QFile file("./Test.txt");
if (file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) {
QString strTest = "input test text to file";
file.write(strTest..toUtf8().data());
file.close();
}
编码问题解决
当使用上述方法去读写*.json类文件时,会出现保存后的文件的编码格式为ANSI,导致读写之间出现差异,此时,我们可以使用 QTextStream 类对文件进行保存。示例如下:
QFile file("./Test.json");
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)){
return ;
}
QString strJson;
strJson= ""{\"error\":0}";
QTextStream streamFileOut(&file);
streamFileOut.setCodec("UTF-8"); //设置编码格式
streamFileOut<<strConfigContent;
streamFileOut.flush(); //刷新等待写入的数据
streamFileOut.setGenerateByteOrderMark(false); //if false no BOM will be inserted
file.close();