Witam
mam kodzik
procedure TForm2.PobierzCzlonkow(Sender: TObject);
var
adresURL,nazwaPliku :String;
plik :File;
inOpen,inURL :HINTERNET;
rozmiar,ileZnakow,rozmiarPliku :DWORD;
dwBufLen, dwIndex, sciagnieto :DWord;
bufor :array[1..1024] of byte;
buf :Pointer;
i: integer;
Begin
for i := 1 to Memo1.Lines.Count do
begin
//ustawiamy dane...
inOpen:= nil; inURL:= nil;
rozmiarPliku:= 0;
rozmiar:= 0;
ProgressBar1.Position:= 0;
//zmienna z adresem URL z którego ściągamy plik
adresURL:= PobierzAdres(Edit1.Text)+Memo1.Lines[i];
{zmienna z nazwą pliku jaka ma być po ściągnięciu
- można wyciągnąć nazwe pliku z adresu URL}
nazwaPliku:= 'c:\VendettaPliki\player'+IntToStr(i)+'.html';
//pobieramy rozmiar pliku jeżeli coś już ściągaliśmy...
if FileExists(nazwaPliku) then
begin
AssignFile(plik, nazwaPliku);
Reset(plik, 1);
rozmiarPliku:= FileSize(plik); //pobieramy rozmiar pliku
Seek(plik, FileSize(plik)); //ustawiamy skażnik na końcu pliku
end
else
begin
AssignFile(plik,nazwaPliku);
ReWrite(plik, 1);
end;
Try
//łączymy się z serwerem...
Label1.Caption:='Łączenie...';
Application.ProcessMessages;
inOpen:= InternetOpen('Mozilla',PRE_CONFIG_INTERNET_ACCESS,nil,nil,0);
inURL:= InternetOpenURL(inOpen,PChar(adresURL),'Accept: */*', StrLen('Accept: */*'),0,0);
if not (inURL <> nil) then
begin
ShowMessage('Nie można uzyskać połączenia');
Stop:= True;
InternetCloseHandle(inURL);
InternetCloseHandle(inOpen);
CloseFile(plik);
Exit;
end;
//pobieramy całkowity rozmiar pliku znajdującego sie na serwerze...
dwIndex:= 0;
dwBufLen:= 1024;
GetMem(Buf, dwBufLen);
HttpQueryInfo(inURL, HTTP_QUERY_CONTENT_LENGTH,buf, dwBufLen,dwIndex);
//ustawiamy progresy (paski postępu)
rozmiar:= StrToInt(StrPas(Buf));
Caption:= 'Rozmiar pliku do ściągnięcia: '+ IntToStr(rozmiar);
ProgressBar1.Max:= rozmiar;
ProgressBar1.Position:= rozmiarPliku;
{ ustawiamy wskażnik pliku znajdującego się na serwerze, czyli
ustalamy od jakiego miejsca w pliku rozpoczynamy pobieranie }
if rozmiarPliku > 0 then InternetSetFilePointer(inURL,rozmiarPliku,nil,0,0);
//pobieranie pliku z serwera...
Label1.Caption:='Ściąganie pliku...';
while (ileZnakow <> 0) and (Stop = false) do
begin
InternetReadFile(inURL, @bufor, SizeOf(bufor),ileZnakow);
InternetQueryDataAvailable(inURL,rozmiar, 0, 0);
BlockWrite(plik, bufor,ileZnakow);
sciagnieto:= FileSize(plik);
Label1.Caption:='Ściągnięto '+ IntToStr(sciagnieto);
ProgressBar1.Position:= sciagnieto;
Application.ProcessMessages;
end;
except
ShowMessage('Wystąpił błąd podczas ściągania pliku !');
Stop:= True;
InternetCloseHandle(inURL);
InternetCloseHandle(inOpen);
CloseFile(plik);
Exit;
end;
Stop:= False;
InternetCloseHandle(inURL);
InternetCloseHandle(inOpen);
CloseFile(plik);
if ProgressBar1.Position = ProgressBar1.Max then
Label1.Caption:= 'Plik został ściągnięty'
else Label1.Caption:= 'Zatrzymane ściąganie pliku';
Beep;
end;
End;
I kiedy nie używam pętli to ściaga poprawnie jedne plik. Tylko że ja mam do ściagniecia ~150plików i wrzuciłem ten kod w petle to wtedy ściaga mi puse pliki.
Co zrobiłem żle???