【发布时间】:2012-05-23 08:25:15
【问题描述】:
考虑以下使用 Indy 组件从 Internet 下载文件的代码:
procedure TForm26.Button1Click(Sender: TObject);
var
vFileStream : TStream;
begin
DeleteFile('C:\test.exe');
vFileStream := TFileStream.Create('C:\test.exe', fmCreate);
IdHTTP1.Get('SomeUrl', vFileStream);
vFileStream.Free;
end;
我收到内存不足异常。发生的情况是,除了我使用TFileStream 之外,写入它的字节不会直接进入磁盘,而是会一直保留在内存中,直到get 终止。
我要下载的文件非常非常大。
有谁知道如何下载大文件而不会出现内存不足异常?
Delphi 2010 和来自 Indy 的 SVN 的最新 Indy 10。
编辑
这不是FileStream 的问题。这是一个Indy 问题。 Indy 以某种方式在将文件写入流之前将其缓存在内存中。
【问题讨论】:
-
如果重要的话,什么版本的Delphi和什么版本的Indy?
-
Delphi 2010 和来自 Indy 的 SVN 的最新 Indy 10。
-
代码告诉你什么?
IdHTTP1.Get是否在写入文件之前将整个文件下载到内存中? -
@DavidHeffernan 我不知道,我没有看过 indys 代码。
-
TIdHTTP如果数据被压缩(Indy 还不支持 HTTP 的流式解压),或者数据是 HTML 并且TIdHTTP.HTTPOptions属性不包含hoNoParseMetaHTTPEquiv标志。
标签: delphi file download delphi-2010 indy