Qt4.5.0内存映射文件示例

来源:互联网 发布:1元云购源码下载 编辑:程序博客网 时间:2024/06/03 17:53

采用Qt4.5.0内存映射文件技术复制一个文件。速度要比使用IO读写快一倍以上。

 

bool copydataqt4::copyFileMap(){QFile objInputFile(m_strInputFile);if (!objInputFile.open(QIODevice::Unbuffered | QIODevice::ReadOnly)){return false;}QFile objOutputFile(m_strOutputFile);if (!objOutputFile.open(QIODevice::Unbuffered | QIODevice::ReadWrite | QIODevice::Truncate)){objInputFile.close();return false;}uchar * pInputData;uchar * pOutputData;m_qint64FileOffset = 0;m_qint64InputFileSize = objInputFile.size();objOutputFile.resize(m_qint64InputFileSize);int unTmpBlockSize = 0;while(m_qint64FileOffset < m_qint64InputFileSize){if (m_qint64InputFileSize-m_qint64FileOffset >= m_unBlockSize){unTmpBlockSize = m_unBlockSize;}else{unTmpBlockSize = m_qint64InputFileSize-m_qint64FileOffset;}pInputData = objInputFile.map(m_qint64FileOffset,unTmpBlockSize);if (pInputData == NULL){objInputFile.close();objOutputFile.close();return false;}pOutputData = objOutputFile.map(m_qint64FileOffset,unTmpBlockSize);if (pOutputData == NULL){objInputFile.close();objOutputFile.close();return false;}memcpy(pOutputData,pInputData,unTmpBlockSize);m_qint64FileOffset += unTmpBlockSize;objInputFile.unmap(pInputData);objOutputFile.unmap(pOutputData);}objInputFile.close();objOutputFile.close();return true;}


 

原创粉丝点击