从QNetworkReply读取写入文件

时间:2015-11-09 08:52:21

标签: qt qnetworkaccessmanager qnetworkreply qnetworkrequest

假设我已经执行了QNetworkRequest并获得了拨款QNetworkReply。如果它是一个大文件(比如说1 GB),我怎样才能创建一个4k字节的数组缓冲区并将4k×4k的数据读入该数组并将其同时写入一个打开的文件流中? 例如,等效的C#代码就是这个(我熟悉C#而不是Qt):

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

----编辑

实际上我要做的是在我的应用程序的每次运行中都有一个下载恢复功能。每次我尝试恢复下载时,我都会设置range的{​​{1}}标题并只获取其余的数据,因此需要一次又一次地写入数据。

1 个答案:

答案 0 :(得分: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);
  } 
}