22.05.2006
Если ваша программа содержит подключаемые модули (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://www.TrueMind.ru/files/article/forum.xml'; LocalFileName:='TrueMind.xml'; if GetInetFile(FileOnNet,LocalFileName)=True then ShowMessage('Download successful') else ShowMessage('Error in file download') end;
Этот кусок кода скачивает файл с http://www.TrueMind.ru/files/article/forum.xml и записывает его в текущий каталог под именем 'TrueMind.xml'. Все очень просто.
|