本文主要是介绍Qt超大文本文件读取,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Qt读取,显示几百M甚至几个G的超大文本文件时,调用QFile::open()读取,容易出现加载卡死。
对此,可以调用QFile::map()反射内存。
uchar *QFileDevice::map(qint64 offset, qint64 size, QFileDevice::MemoryMapFlags flags = NoOptions)
Maps size bytes of the file into memory starting at offset. A file should be open for a map to succeed but the file does not need to stay open after the memory has been mapped. When the QFile is destroyed or a new file is opened with this object, any maps that have not been unmapped will automatically be unmapped.
The mapping will have the same open mode as the file (read and/or write), except when using MapPrivateOption, in which case it is always possible to write to the mapped memory.
Any mapping options can be passed through flags.
Returns a pointer to the memory or 0 if there is an error.
map()的意思就是将文件从offset位置开始,到size字节的数据映射到内存中。
QFile file(fileName);
file.open(QIODevice::ReadWrite );
uchar* fPtr = file.map(0, file.size());//映射文件,注意这里的file.size()如果大于系统的虚拟内存,就要对文件分块映射//其实对于大文件一般都是进行分块映射的。
if(fPtr)
{//do something to fPtrunmap(fPtr);
}file.close()
这篇关于Qt超大文本文件读取的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!