注: このコードは Delphi XE2 にあります。
UrlMon.dll を使用せずにファイルをダウンロードしようとしています。
私は wininet だけを使用したいと思います。これは私がこれまでに思いついたものです:
uses Windows, Wininet;
procedure DownloadFile(URL:String;Path:String);
Var
InetHandle:Pointer;
URLHandle:Pointer;
FileHandle:Cardinal;
ReadNext:Cardinal;
DownloadBuffer:Pointer;
BytesWritten:Cardinal;
begin
InetHandle := InternetOpen(PWideChar(URL),0,0,0,0);
URLHandle := InternetOpenUrl(InetHandle,PWideChar(URL),0,0,0,0);
FileHandle := CreateFile(PWideChar(Path),GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,0);
Repeat
InternetReadFile(URLHandle,DownloadBuffer,1024,ReadNext);
WriteFile(FileHandle,DownloadBuffer,ReadNext,BytesWritten,0);
Until ReadNext = 0;
CloseHandle(FileHandle);
InternetCloseHandle(URLHandle);
InternetCloseHandle(InetHandle);
end;
問題はループと「ReadNext」にあると思います。このコードを実行すると、正しいパスにファイルが作成されますが、コードは終了し、ファイルは 0 バイトになります。