2015-11-09 3 views
2

Предположим, что я выполнил QNetworkRequest и получил присвоенный QNetworkReply. Если это большой файл (скажем, 1 ГБ), как я могу создать, скажем, 4-байтовый буфер массива и считывать данные 4k на 4k в этот массив и записывать его в одно и то же время в открытый поток файлов? Например эквивалент C# код будет это (я знаком с C# не Qt):Прочтите от QNetworkReply напишите в файл

public static void CopyStream(Stream input, Stream output) 
{ 
    // input is web stream, output is filestream 
    byte[] buffer = new byte[4096]; 
    int read; 
    while ((read = input.Read(buffer, 0, buffer.Length)) > 0) 
    { 
     output.Write (buffer, 0, read); 
    } 
} 

---- редактировать

На самом деле то, что я пытаюсь сделать, это загрузить докачки на каждый запуск моего приложения. каждый раз, когда я пытаюсь возобновить загрузку, я устанавливаю заголовок rangeQNetworkRequest и просто получаю остальную информацию, поэтому вам нужно записывать данные не сразу, а шаг за шагом.

+0

Вы читали о 'QNetworkReply :: setReadBufferSize'? – Ilya

+0

@Ilya Я добавил дополнительную информацию о том, что я пытаюсь сделать, как вы думаете, 'QNetworkReply :: setReadBufferSize' работает для меня? я не так хорошо знаком с Qt – epsi1on

ответ

1

Возможно, вам нужно решение в C++, поскольку Qt является библиотекой. Одним из возможных вариантов является использование QIODevice класс, который наследуется как QFile и QNetworkReply

void copyStream(QIODevice& input, QIODevice& output){ 
    std::vector<char> buffer(4096); 
    qint64 bytesRead; 
    while ((bytesRead=input.read(&buffer[0],buffer.size()))>0){ 
    output.write(&buffer[0],bytesRead); 
    } 
}