gpt4 book ai didi

windows - 在 Delphi 中下载文件

转载 作者:可可西里 更新时间:2023-11-01 12:30:24 26 4
gpt4 key购买 nike

谷歌搜索显示了一些关于如何在 Delphi 中下载文件的示例,但大多数都是错误的,并且有一半的时间在我的经验中不起作用。

我正在寻找一个简单而强大的解决方案,它可以让我下载一个 exe(用于更新我的应用程序)并暂停当前更新线程的执行,直到下载完成或出现错误。该过程已经线程化,因此下载代码应该保持执行直到完成(希望如此)。

这里有两个实现,看起来都很复杂
1. http://www.scalabium.com/faq/dct0116.htm
2. http://delphi.about.com/od/internetintranet/a/get_file_net.htm

最佳答案

为什么不使用 Indy?如果使用 TIdHTTP 组件,很简单:

procedure TMyForm.DownloadFile;    
var
IdHTTP1: TIdHTTP;
Stream: TMemoryStream;
Url, FileName: String;
begin
Url := 'http://www.rejbrand.se';
Filename := 'download.htm';

IdHTTP1 := TIdHTTP.Create(Self);
Stream := TMemoryStream.Create;
try
IdHTTP1.Get(Url, Stream);
Stream.SaveToFile(FileName);
finally
Stream.Free;
IdHTTP1.Free;
end;
end;

您甚至可以使用 OnWorkOnWorkBegin 事件添加进度条:

procedure TMyForm.IdHTTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode;AWorkCountMax: Int64);
begin
ProgressBar.Max := AWorkCountMax;
ProgressBar.Position := 0;
end;

procedure TMyForm.IdHTTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
begin
ProgressBar.Position := AWorkCount;
end;

procedure TMyForm.DownloadFile;
var
IdHTTP1: TIdHTTP;
Stream: TMemoryStream;
Url, FileName: String;
begin
Url := 'http://www.rejbrand.se';
Filename := 'download.htm';

IdHTTP1 := TIdHTTP.Create(Self);
Stream := TMemoryStream.Create;
try
IdHTTP1.OnWorkBegin := IdHTTPWorkBegin;
IdHTTP1.OnWork := IdHTTPWork;
IdHTTP1.Get(Url, Stream);
Stream.SaveToFile(FileName);
finally
Stream.Free;
IdHTTP1.Free;
end;
end;

我不确定这些事件是否在主线程的上下文中触发,因此对 VCL 组件所做的任何更新可能必须使用 TIdNotify 组件来完成以避免线程问题。也许其他人可以检查一下。

关于windows - 在 Delphi 中下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3506251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com