[Delphi] Ściąganie pliku przez internet

0

Gdzieś przeczytałem, żeby ściągnąc plik z ftp należy wpisać kod :
if URLDownloadToFile(Nil,'adres pliku lub strony','miejsce docelowe',0,Nil)

jak mogę ustawić aby podczas ściągania pliku był pokazany na komponęcie ProgressBar poziom ściągania.
Czy ten kod obejmuje też ściąganie plików np. zip, html, exe

Z góry dzięki za pmoc. [cya] [cya] [cya]

0

Ja tez mam pytanie odnosnie URLDownloadToFile.
Mianowicie uzywam BCB6 i za kazdym razem gdy wywoluje ta funkcje wywala mi Unresolved Externals. Zaznaczam, ze unit URlMon dodalem do programu. Czemu tak sie dzieje??

A co do Twojego pytania - zdaje mi sie (moze zle?), ze ta funkcja nie daje mozliwosci pokazania postepu. Co innego z HttpGet:)

0

Co innego z HttpGet:)

Możesz przybliżyć mi działanie tej funkcji
Na twoje pierwsze pytanie jest mi trudno odpowiedzieć bo niestety nie pracuję na d6 ale często tak jest że niektóre funkcje z d5 nie działają na d6

0

HttpGet można ściągnąć z tej strony jest w komponentach. ;-)

0

Stokrotne dzięki [cya] [cya] [cya] [cya]
Już mi się wydawało że nie uda mi się tego problemu obejść

0

Niedawno napisalem przy okazji pisania ksiazki Delphi 7. Kompendium programisty taki kod (pochodzi z rozdzialu 11.):

uses WinInet;

procedure TMainForm.Download(const URL: String; FileName: String);
var
Buffer : array[1..1024] of Byte; // bufor zawierający ściągnięty fragment pliku
hSession, hURL : HINTERNET;
dwRead : DWORD; // ilość odczytanych danych
dwSize : DWORD; // rozmiar pliku
F : File;
pBuf : Pointer;
dwBufLen : DWORD;
dwIndex : DWORD;
TotalRead : Integer;
begin
{ otwieranie połączenia }
hSession := InternetOpen('Fast Download',
INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
Application.ProcessMessages;
lblProgress.Caption := 'Łączenie z serwerem...';
btnDownload.Enabled := False;

try
{ otwarcie podanego adresu URL }
hURL := InternetOpenURL(hSession, PChar(URL), nil, 0, 0, 0);
Application.ProcessMessages;
lblProgress.Caption := 'Czekanie na odpowiedź...';

dwBufLen := 1024;
dwIndex := 0;
GetMem(pBuf, dwBufLen);

{ pobranie informacji na temat wielkości pliku }
HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH,
                          pBuf, dwBufLen, dwIndex);
dwSize := StrToInt(StrPas(pBuf));
ProgressBar.Max := (dwSize div 1024);

FreeMem(pBuf, dwBufLen);

try
  AssignFile(F, FileName);
  try
    Rewrite(F, 1);
    repeat
      if Broken then Break;
      
    { pobieranie kolejnych fragmentów pliku }
      InternetReadFile(hURL, @Buffer, SizeOf(Buffer), dwRead);
      BlockWrite(F, Buffer, dwRead); // zapisanie buforu do pliku
      TotalRead := TotalRead + dwRead;

      Application.ProcessMessages;
      { wyświetlenie postępu } 
      lblProgress.Caption := 'Ściągam ' + IntToStr(TotalRead div 1024) + ' kB z ' + IntToStr(dwSize div 1024) + ' kB';
      ProgressBar.Position := TotalRead div 1024;
    until dwRead = 0;
  finally
    CloseFile(F);
  end;
finally
  InternetCloseHandle(hSession);
end;

finally
InternetCloseHandle(hURL);
btnDownload.Enabled := False;
end;
lblProgress.Caption := 'Pobrano';
end;

Jezeli skorzystasz bez objasnienia to ok :)

0

Dzięki na pewno zczaję o co biega
jeszcze raz wszystkim dziękuję :-D [cya] :-D

1 użytkowników online, w tym zalogowanych: 0, gości: 1