4

このコードを使用して、小さなファイルをダウンロードします。

Var
 ms:TMemoryStream;
begin
  ms:=TMemoryStream.Create;
  Idhttp1.get('http://mydomain.com/myfile.zip',ms);
  ms.SaveToFile('myfile.zip');
  ms.Free;
end;

ただし、ファイルはディスクに保存する前に RAM に保存されるため、たとえば 1Gb を超えるファイルをダウンロードするのは難しい場合があります。ファイルを部分ごとにダウンロードする方法はありますか? または、WinInet を使用する必要がありますか? 前もって感謝します!

4

1 に答える 1

13

TMemoryStreamはメモリ内バッファを提供するため、1 つにダウンロードする場合は、受信したすべてを保持するのに十分なメモリが必要です。ただし、ストリームの種類はこれだけではありません。Getメソッドには、受信した内容をディスクに書き込むストリームなど、任意の種類のストリームを渡すことができます。TFileStreamたとえば、 を使用します。

var
  s: TStream;

s := TFileStream.Create('myfile.zip', fmCreate);
try
  IdHttp1.Get(..., s);
finally
  s.Free;
end;

どこに電話してもLoadFromFile、どこにいても、それがより良い選択である可能性があります.SaveToFileTMemoryStreamTFileStream

于 2013-03-13T12:36:27.817 に答える