С "классиками" сами разберетесь, а цикл лучше сконструировать так
C++ (Qt)
qint64 bytesTotal = srcFile.size(); // число байтов которое нужно прочитать/скопировать
qint64 bytesDone = 0; // число прочитанных
const qint64 bufSize = 1024 * 64; // дело вкуса но больший буфер не особо быстрее
while (bytesDone < bytesTotal) {
qint64 bytesRead = qMin(bytesTotal - bytesDone, bufSize); // размер порции данных
bytesDone += bytesRead; // обновляем число прочитанных
... // копируемся (используем bytesRead)
}