Периодическая запись в файл кусками - PullRequest
0 голосов
/ 28 ноября 2018

В настоящее время я записываю огромный QByteArray в файл после , заполняя его данными:

QByteArray my_ba;

// Fill out my_ba in some loops

path = "/some/path.data";
QFile file(path);
file.open(QIODevice::WriteOnly);
file.write(my_ba);
file.close();

Так как мой QByteArray может быть порядка ГБ с, чтобы уменьшить использование памяти, мне нужно записать мой QByteArray в файл кусками .

Есть ли в Qt какой-либо удобный инструмент для этого?Есть ли стандартная практика?

1 Ответ

0 голосов
/ 29 ноября 2018

Я закончил запись в файл кусками периодически следующим образом:

for(unsigned int j = 0; j < Count; ++j) {

    // Fill out QByteArray my_ba in every single iteration of the loop

    // ...

    // But write my_ba only periodically and then clear it!
    // period is picked in such a way that writing to file will be done for every 1MB of data
    if( j % period == 0){
            if(file){
                file->write(my_ba);
                file->flush();
                my_ba.clear();
            }
        }

    // ...
}

Я периодически очищаю свой QByteArray, выполняя my_ba.clear() после записи его содержимого в файл, поэтомумой QByteArray никогда не станет большим, и его потребление памяти , следовательно, уменьшится.

...