Закачка файла из интернета
Как сделать закачку файлов из интернета?
var stop:bool; procedure TForm1.FormCreate(Sender: TObject); begin stop := false; end; procedure TForm1.Button1Click(Sender: TObject);//кнопка качать var hInet, //<-переменная сод. указатель на сессию hURL: HINTERNET; //<-указатель на URL fSize, //<-размер файла ReadLen, //<-количество реально прочитанных байт RestartPos: DWORD; //<-|позиция с которой начинается // |докачка fBuf: array[1..1024] of byte; //<-буфер куда качаем f: file; //<-файл куда качаем Header: string; //<-|дополнительная переменная в HTTP // |заголовок begin RestartPos := 0; //<- |инициализация fSize := 0; //<- |переменных Button1.Enabled := false; Button2.Enabled := true; //Если на винте есть файл то считаем, что нужно докачивать if FileExists('c:\LoadFile.tmp') then begin AssignFile(f, 'c:\LoadFile.tmp'); Reset(f, 1); RestartPos := FileSize(F); Seek(F, FileSize(F)); end else begin //иначе с начала AssignFile(f, 'c:\LoadFile.tmp'); ReWrite(f, 1); end; //открываем сессию hInet := InternetOpen('Mozilla', PRE_CONFIG_INTERNET_ACCESS, nil, nil, 0); //Пишем дополнительную строку для заголовка Header := 'Accept: */*'; //открываем URL hURL := InternetOpenURL(hInet, PChar(ComboBox1.Text), pchar(Header), StrLen(pchar(Header)), 0, 0); //устанавливаем позицию в файле для докачки if RestartPos > 0 then InternetSetFilePointer(hURL, RestartPos, nil, 0, 0); //смотрим ск-ко надо скачать InternetQueryDataAvailable(hURL, fSize, 0, 0); if RestartPos > 0 then begin ProgressBar1.Min := 0; ProgressBar1.Max := fSize + RestartPos; ProgressBar1.Position := RestartPos; end else begin ProgressBar1.Min := 0; ProgressBar1.Max := fSize + RestartPos; end; //качаем до тех пор пока реально прочитаное число байт не //будет равно нулю или не стор while (ReadLen <> 0) and (stop = false) do begin //читаем в буфер InternetReadFile(hURL, @fBuf, SizeOf(fBuf), ReadLen); //смотрим ск-ко осталось докачать InternetQueryDataAvailable(hURL, fSize, 0, 0); ProgressBar1.Position := ProgressBar1.Max - fSize; BlockWrite(f, fBuf, ReadLen); //<-пишем в файл Application.ProcessMessages; end; stop := false; Button1.Enabled := true; Button2.Enabled := false; InternetCloseHandle(hURL); //<-|закрываем InternetCloseHandle(hInet); //<-|сесcии CloseFile(f); //<-|и файл end; procedure TForm1.Button2Click(Sender: TObject);//кнопка пауза begin stop := true; //<-сообщаем о необходимости прерывания скачки end;