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提供了一个内存缓冲区,所以如果你下载到一个,你需要有足够的内存来保存你收到的所有东西。不过,这不是唯一的流。您可以将Get任何类型的流传递给该方法,包括在接收到内容时将其内容写入磁盘的流。TFileStream例如,使用。

var
  s: TStream;

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

无论您在哪里打电话LoadFromFileSaveToFile在 上TMemoryStream,这可能TFileStream是一个更好的选择。

于 2013-03-13T12:36:27.817 回答