QFile
aを別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;
}
}
このフラグメントからは明らかではありませんが、大きなファイルの進行状況のコールバックとキャンセル機能を提供できるように、バイナリ ファイル全体をチャンク単位で別の場所にコピーするだけです。
もう 1 つのアイデアは、メモリ マッピングを使用することです。するべきか?その場合、ソース ファイルのみをマップして を使用するか_destFile.write
、両方をマップして を使用する必要がありますmemcpy
か?
この質問は実際には Qt に結び付けられていないと思います。答えは、メモリ マッピングをサポートするすべてのファイル I/O API に共通するはずです。