12. marts 2005 - 00:53Der er
2 kommentarer og 1 løsning
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;
Der bliver investeret massivt i AI. Teknologien er mere tilgængelig end nogensinde, og ambitionerne er høje. Alligevel oplever mange virksomheder, at resultaterne udebliver.
følgende funktioner VIRKER!!! men kodelinien tilsidst "CloseFile" generere en windows fejl (en høj lyd som indikere en systemfejl)... hvad gør jeg galt..??
function TMainFunctionForm.DownloadURL(const aUrl: string): Boolean; var hSession: HINTERNET; hService: HINTERNET; lpBuffer: array[0..1024 + 1] of Char; dwBytesRead,akk,dwindex,dwcodelen: DWORD; LocalFile:string; F : File; filesize : DWord; dwcode:pointer; res : pchar; begin Result := False; LocalFile := 'C:\akljsdh.avi'; Assignfile(F,LocalFile); Rewrite(F,1); akk := 0; dwcodeLen := 20; dwIndex := 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); HttpQueryInfo(hService, HTTP_QUERY_CONTENT_LENGTH, @dwcode, dwcodeLen, dwIndex); res := pchar(@dwcode); edit1.text := res; filesize := StrToInt(res); if Assigned(hService) then begin Application.processmessages; try while True do begin dwBytesRead := 1024; InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead); BlockWrite(F, lpbuffer, dwBytesRead); if dwBytesRead = 0 then break; akk := akk + dwBytesRead; Application.ProcessMessages; ProgressBar1.Position := Round(akk/filesize * 100); end; Result := True; finally InternetCloseHandle(hService); end; end; end; finally InternetCloseHandle(hSession); end; CloseFile(F); end;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.