Qt4.5.0内存映射文件示例

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


 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值