witam mam kod z 4p, ktory zasysa plik przy pomocy WinInet
procedure TTd.execute;
var
Buffer : array[1..64000] of Byte; // bufor zawierający pobrany 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
FreeOnTerminate := True;
{ otwieranie połączenia }
hSession := InternetOpen('Fast Download',
INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
Application.ProcessMessages;
form1.lblProgress.Caption := 'Łączenie z serwerem...';
//btnDownload.Enabled := False;
try
{ otwarcie podanego adresu URL }
hURL := InternetOpenURL(hSession, PChar(a), nil, 0, 0, 0);
Application.ProcessMessages;
form1.lblProgress.Caption := 'Czekanie na odpowiedź...';
dwBufLen := 64000;
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));
form1.ProgressBar.Max := (dwSize div 1024);
FreeMem(pBuf, dwBufLen);
try
AssignFile(F, b);
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 w pliku
TotalRead := TotalRead + dwRead;
Application.ProcessMessages;
{ wyświetlenie postępu }
form1.lblProgress.Caption := 'Ściągam ' + IntToStr(TotalRead div 1024) + ' kB z ' + IntToStr(dwSize div 1024) + ' kB';
form1.ProgressBar.Position := TotalRead div 1024;
until dwRead = 0;
finally
CloseFile(F);
end;
finally
InternetCloseHandle(hSession);
end;
finally
InternetCloseHandle(hURL);
// btnDownload.Enabled := False;
end;
form1.lblProgress.Caption := 'Pobrano';
end;
Problem polega na tym, że jest do dyspozycji łącze 100MB (serwer dedykowany), predkosc zasysania pliku to od 4 do 8MB.
Maksymalna wartosc którą moge ustawić dla wielkości bufora, tak że program sie nie wykrzaczał, to 1024000 - czyli 1MB. Program działa, ale pobiera TYLKO z prędkością 1MB/s :/ bo jest po prostu marnotrawieniem łącza :/
Tak więc moje pytanie : czy da sie jakoś dynamicznie ustawiać wielkośc bufora ? (tylko nie piszcie prosze zebym uzyl SetLength - bo tego sie domyslam - tylko ne wiem jak to zrobic ;/)