我需要将 a 分块复制QFile
到另一个QFile
,所以我不能使用QFile::copy
. 这是最原始的实现:
bool CFile::copyChunk(int64_t chunkSize, const QString &destFolder)
{
if (!_thisFile.isOpen())
{
// Initializing - opening files
_thisFile.setFileName(_absoluteFilePath);
if (!_thisFile.open(QFile::ReadOnly))
return false;
_destFile.setFileName(destFolder + _thisFileName);
if (!_destFile.open(QFile::WriteOnly))
return false;
}
if (chunkSize < (_thisFile.size() - _thisFile.pos()))
{
QByteArray data (chunkSize, 0);
_thisFile.read(data.data(), chunkSize);
return _destFile.write(data) == chunkSize;
}
}
从这个片段中不清楚,但我只打算将一个二进制文件作为一个整体复制到另一个位置,只是以块的形式,这样我就可以为大文件提供进度回调和取消工具。
另一个想法是使用内存映射。我是不是该?如果是这样,那么我应该只映射源文件并仍然使用_destFile.write
,还是应该同时映射并使用memcpy
?
我想这个问题与 Qt 并没有真正的联系,我认为答案应该适用于任何支持内存映射的文件 I/O API。