2015-11-09 75 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); 
    } 
}