2015-11-09 74 views
2

假設我已執行QNetworkRequest並獲得撥款QNetworkReply。如果它是一個大文件(比如說1GB),我怎麼能創建一個4k字節的數組緩衝區,並將4k的數據讀入該數組,並將其同時寫入一個打開的文件流? 例如相當於C#代碼會是這樣(我熟悉C#不QT):從QNetwork讀取回複寫入文件

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); 
    } 
} 

----編輯

其實我所試圖做的是一個下載恢復能力每次運行我的應用程序。每次我嘗試恢復下載時,我都設置了QNetworkRequestrange標題,並且只是獲取其餘數據,因此需要一步一步地寫入數據。

+0

你看了關於'QNetworkReply :: setReadBufferSize'? – Ilya

+0

@伊利亞我已經添加了一些額外的信息,我想要做什麼,你認爲'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); 
    } 
}