Закачиваем фаилы из нета по ссылке

Сегодня я расскажу и покажу как закачать фаил из интернета. Конечно считывания по частям в отдельном потоке вы не увидите, для этого нужно много поработать у меня все проще, но на базе примера вы спокойно можете создать свой полноценный downloader.

код представляет собой функцию которой передается ссылка на фаил и путь с именем нового - закаченного. Код:

function GetInetFile(const URL, FileName: string): boolean;
const
BufferSize = 1024; // размер буффера для закачки фаила в килобайтах
//следовательно если фаил большего размера то работать не будет
//для таких случаев более удобен динамический массив
var
hSession, hURL: HInternet; //переменные соединения и открытия сессии
Buffer: array[1..BufferSize] of Byte; //сам буффер
BufferLen: DWORD; //длина прочитанного
myfile: 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(URL), nil, 0, 0, 0);//получаем указатель на фаил в интернете
try //-\\-
AssignFile(myfile, FileName); //указываем и открываем на запись
Rewrite(myfile,1); // фаил для заполнения скаченым из нета
repeat //повторяем -
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);//пытаемся скачать(причем все сразу) и
BlockWrite(myfile, Buffer, BufferLen);//записываем в фаил
until // - пока
BufferLen = 0;//ничего не скачено а если уже скачали то...
CloseFile(myfile);//закрываем новоипеченый - закачанный фаил
Result := True;//и говорим что закачали
finally// на конец
InternetCloseHandle(hURL);//закрываем соеденение
end;
finally // -\\-
InternetCloseHandle(hSession);//закрываем указатель
end; //приехали
end;

вызов имеет вид GetInetFile('www.hackstyle.narod.ru/index.htm', 'c:\HACK-index.htm');

да чуть не забыл в uses обязательно объявление Wininet !!!

 

 
Хостинг от uCoz