【发布时间】:2012-11-30 03:54:41
【问题描述】:
注意: 此代码在 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 字节。
【问题讨论】:
-
ReadNext
-
什么也没改变。我什至在 InternetReadFile 显示 ReadNext 变量或“BytesRead”之后显示一个 MessageBox,它显示 0。
-
请注意 WinInet 已过时!!!!!!!!!!您可能想使用 WinHTTP:blog.synopse.info/post/2011/07/04/WinINet-vs-WinHTTP
-
另外你的缓冲区可能太小了。