Størrelse af fil som downloades via internette via HTTP
Hej, jeg bruger WININIT til at downloade en fil med... for at kunne beregne hvor lang tid der er inden filen er endeligt downloadet, kalder jeg "InternetQueryDataAvailable" for at bestemme den filens størrelse...Det kald til den funktion virker bare ikke! Det giver langt fr altid den korrekte størrelse, og når det er megte store filer giver den slet ikke det rigtige resultat... Hvordan gør jeg så?
kodelinierne er herunder...
function TMainFunctionForm.DownloadURL(const aUrl: string): Boolean;
var
hSession: HINTERNET;
hService: HINTERNET;
lpBuffer: array[0..1024 + 1] of Char;
dwBytesRead,akk: DWORD;
LocalFile:string;
F : File;
filesize : DWord;
begin
Result := False;
LocalFile := 'C:\akljsdh.avi';
Assignfile(F,LocalFile);
{$i-}
Rewrite(F, 1);
akk := 0;
hSession := InternetOpen('alds', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
if Assigned(hSession) then
begin
hService := InternetOpenUrl(hSession, PChar(aUrl), nil, 0, INTERNET_FLAG_RELOAD, 0);
InternetQueryDataAvailable(hService,filesize,INTERNET_FLAG_RELOAD,0);
edit1.text := IntToStr(filesize);
if Assigned(hService) then
Application.processmessages;
try
while True do
begin
dwBytesRead := 1024;
InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead);
if dwBytesRead = 0 then break;
BlockWrite(F, lpbuffer, dwBytesRead);
akk := akk + dwBytesRead;
Application.ProcessMessages;
ProgressBar1.Position := Round(akk/filesize * 100);
end;
Result := True;
finally
InternetCloseHandle(hService);
end;
end;
finally
InternetCloseHandle(hSession);
end;
CloseFile(F);
end;
