考虑以下使用Indy组件从互联网下载文件的代码:
```Delphi procedure TForm1.Button1Click(Sender: TObject); var IdHTTP: TIdHTTP; begin IdHTTP := TIdHTTP.Create(nil); try IdHTTP.Get('http://www.example.com/file.txt', 'localfile.txt'); finally IdHTTP.Free; end; end; ```
该代码创建了一个TIdHTTP对象,然后使用Get方法从指定的URL下载文件并将其保存在本地文件中。
我遇到了内存溢出异常。问题在于我使用的是
我正在尝试下载一个非常大的文件。
有人知道如何在下载大文件时避免内存溢出异常吗?
Delphi 2010 和最新的 Indy 10(来自 Indy's SVN)。 更新: 这不是一个
```Delphi procedure TForm1.Button1Click(Sender: TObject); var IdHTTP: TIdHTTP; begin IdHTTP := TIdHTTP.Create(nil); try IdHTTP.Get('http://www.example.com/file.txt', 'localfile.txt'); finally IdHTTP.Free; end; end; ```
该代码创建了一个TIdHTTP对象,然后使用Get方法从指定的URL下载文件并将其保存在本地文件中。
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 10(来自 Indy's SVN)。 更新: 这不是一个
FileStream
的问题。这是一个 Indy
的问题。Indy 在写入流之前以某种方式将文件缓存在内存中。
IdHTTP1.Get
在写入文件之前是否将整个文件下载到内存中? - David HeffernanhoNoParseMetaHTTPEquiv
标志是做什么用的? - Leonardo Herrera