Качаем файл из Internet
(Delphi)
Если ваша программа содержит подключаемые модули (BPL или
DLL) или есть необходимость обновлять саму программу, то наверняка стояла проблема
обновления копий программы. С развитием Internet появилась прекрасная возможность
сделать это быстро и красиво. В данной статье мы расскажем, как добавить опцию
автообновления программ из Internet.
Delphi дает нам полный доступ к API WinInet (wininet.pas),
что позволяет подключиться и скачать любой файл с указанного вебсайта, используя
протоколы FTP или HTTP. Например, мы можем использовать функции API WinInet
для создания FTP-браузера или программы для поиска на публичных FTP-серверах
заданных файлов.
Основная функция нашей программы - GetInetFile:
uses Wininet;
function GetInetFile(const fileURL, FileName: String): boolean;
const BufferSize = 1024;
var hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
f: File;
sAppName: string;
begin
Result:=False;
sAppName := ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG,
nil, nil, 0);
try
hURL := InternetOpenURL(hSession,
PChar(fileURL),nil,0,0,0);
try
AssignFile(f, FileName);
Rewrite(f,1);
repeat
InternetReadFile(hURL,
@Buffer, SizeOf(Buffer), BufferLen);
BlockWrite(f,
Buffer, BufferLen)
until BufferLen =
0;
CloseFile(f);
Result:=True;
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end
end;
|
Замечание: конечно, этот пример нужно расширить, вставив,
например, код для отображения прогресса скачивания в цикл.
Использовать функцию GetInetFile очень просто:
var FileOnNet, LocalFileName: string
begin
FileOnNet:='http://src.fitkursk.ru/articles/mp3player.zip';
LocalFileName:='MyFile.zip';
if GetInetFile(FileOnNet,LocalFileName)=True then
ShowMessage('Download successful')
else
ShowMessage('Error in file download')
end;
|
Этот кусок кода скачивает файл с именем mp3player.zip, находящийся
по адресу 'http://src.fitkursk.ru/articles/' и записывает его в текущий каталог
под именем 'MyFile.zip'. Все очень просто.
|