PDA

Ver la Versión Completa : Bajar archivo con Wininet


seoane
08-06-2006, 17:57:51
uses Wininet;

function Bajar(Url: string; Archivo: string): Boolean;
var
hFile: THandle;
hNet: HINTERNET;
hUrl: HINTERNET;
Buffer: array[0..10240] of Char;
BytesRead: DWORD;
BytesWritten: DWORD;
begin
Result := FALSE;
hFile := CreateFile(PChar(Archivo), GENERIC_WRITE, 0, nil, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, 0);
if (hFile <> INVALID_HANDLE_VALUE) then
begin
hNet := InternetOpen('agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if (hNet <> nil) then
begin
hUrl := InternetOpenUrl(hNet, PChar(Url), nil, 0,
INTERNET_FLAG_RELOAD, 0);
if (hUrl <> nil) then
begin
while (InternetReadFile(hUrl, @Buffer, sizeof(Buffer), BytesRead)) do
begin
// Añadir la siguiente liena si es necesario
// Application.ProcessMessages;
if (BytesRead = 0) then
begin
Result := TRUE;
break;
end;
if (not WriteFile(hFile, Buffer, BytesRead, BytesWritten, nil)) then
break;
if (BytesRead <> BytesWritten) then
break;
end;
InternetCloseHandle(hUrl);
end;
InternetCloseHandle(hNet);
end;
CloseHandle(hFile);
end;
end;


Ejemplo de uso:

Bajar('http://www.google.com/intl/es_ALL/images/logo.gif','d:\google.gif');
Bajar('ftp://ftp.opera.com/pub/opera/win/lng/754/es-ES/ow754_3865es-ES.lng','d:\1.lng');