3

a を実行して、割り当てられたQNetworkRequestを取得したとしますQNetworkReply。大きなファイル (1 GB など) の場合、4k バイト配列バッファーを作成し、4k x 4k のデータをその配列に読み取り、同時に開いているファイルストリームに書き込むにはどうすればよいですか? たとえば、同等の C# コードは次のようになります (私は Qt ではなく C# に精通しています)。

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ヘッダーを設定しQNetworkRequestて残りのデータを取得するだけなので、データを一度にではなく段階的に書き込む必要があります。

4

1 に答える 1

1

Qt はライブラリであるため、おそらく c++ でのソリューションが必要です。1 つの可能性は、QFile と QNetworkReply の両方に継承される QIODevice クラスを使用することです。

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);
  } 
}   
于 2015-11-09T10:33:04.603 に答える