首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi文件下载器组件

Delphi文件下载器组件
EN

Stack Overflow用户
提问于 2010-12-24 02:43:58
回答 2查看 3.1K关注 0票数 4

我需要一个Delphi的文件下载器组件。你能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-24 02:49:16

使用高级URLDownloadToFile函数:

代码语言:javascript
复制
uses UrlMon;

...

URLDownloadToFile(nil, 'http://www.rejbrand.se/', 'C:\Users\Andreas Rejbrand\Desktop\index.html', 0, nil);

或者,您可以很容易地使用WinInet函数编写自己的下载器函数,例如

代码语言:javascript
复制
uses WinInet;

...

hInet := InternetOpen(PChar(UserAgent), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
  hURL := InternetOpenUrl(hInet, PChar('http://' + Server + Resource), nil, 0, 0, 0);
  try
    repeat
      InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);

      ...

在SO上有很多示例代码。使用上面的搜索框。

更新

我写了一个小样本。例如,您可能希望在它自己的线程中执行此代码,并让它每隔10 kB左右返回一次,这样您就可以为用户提供一些进度条。

代码语言:javascript
复制
function DownloadFile(const UserAgent, URL, FileName: string): boolean;
const
  BUF_SIZE = 4096;
var
  hInet, hURL: HINTERNET;
  f: file;
  buf: PByte;
  amtc: cardinal;
  amti: integer;
begin
  result := false;
  hInet := InternetOpen(PChar(UserAgent), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  try
    hURL := InternetOpenUrl(hInet, PChar(URL), nil, 0, 0, 0);
    try
      GetMem(buf, BUF_SIZE);
      try
        FileMode := fmOpenWrite;
        AssignFile(f, FileName);
        try
          Rewrite(f, 1);
          repeat
            InternetReadFile(hURL, buf, BUF_SIZE, amtc);
            BlockWrite(f, buf^, amtc, amti);
          until amtc = 0;
          result := true;
        finally
          CloseFile(f);
        end;
      finally
        FreeMem(buf);
      end;
    finally
      InternetCloseHandle(hURL);
    end;
  finally
    InternetCloseHandle(hInet);
  end;
end;
票数 12
EN

Stack Overflow用户

发布于 2010-12-24 04:51:11

您也可以使用Indy实现以下操作:

代码语言:javascript
复制
procedure DownloadHTTP(const AUrl : string; DestStream: TStream);
begin
  with TIdHTTP.Create(Application) do
  try
      try
        Get(AUrl,DestStream);
      except
        On e : Exception do
          MessageDlg(Format('Erreur : %s',[e.Message]), mtInformation, [mbOK], 0);
      end;
  finally
      Free;
  end;
end;

如果你想要快速下载,你也可以使用Clever Internet Suite

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4521535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档