采用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;
}