![]() |
URLDownloadToFile Speed anzeigen
Hallo
ich lade etwas mit URLDownloadtoFile mit diesem ![]() Muss man sich den berechnen aus der Dateigröße und dem schon geladenen ? MfG |
Re: URLDownloadToFile Speed anzeigen
|
Re: URLDownloadToFile Speed anzeigen
Das hat aber nichts mehr mit URLDownloadtoFile zu tun ?
Ich würde eigentlich schon gerne diese Funktion benutzen oder eine etwas mehr Umfangreichere. Diese zeigt nicht so was an, wie schon gedownloaded oder Gesamtgröße ? MfG |
Re: URLDownloadToFile Speed anzeigen
Schon runtergeladen ist ja nun mal das kleinste Problem :)
Einfach eine neue Variable, die am Anfang 0 ist und auf die immer BytesRead addiert wird. Schon hast du die gedownloadeten Bytes. Die Abfrage der Größe ist eigentlich auch einfach einzubauen, allerdings habe ich beim Testen immer 0 zurück bekommen. Ich benutze allerdings C++. Versuchs einfach mal mit ![]() ![]() |
Re: URLDownloadToFile Speed anzeigen
Hallo,
Zitat:
Delphi-Quellcode:
Grüße vom marabu
var
kbsec: Double; begin kbsec := ulProgress * 1000 / 1024 / (GetTickCount - StartTickCount); end; |
Re: URLDownloadToFile Speed anzeigen
huhu!
die unit urlmon ist böse :-) wenn möglich würde ich das ganze umgehen. ich habe mit einer funktion daraus ne html seite heruntergeladen. unter winXP kein problem. unter win vista (in meinem fall 64bit business) führt der spass in der funktion zu einem bluescreen... also wenns vista kompatibel sein soll dann bitte urlmon nicht verwenden... gruß reli |
Re: URLDownloadToFile Speed anzeigen
Hallo
@ marabu so gehts @ Rastaman also ich habe es geschafft die schon heruntergeladenen Bytes herauszufinden aber die Größe der Datei konnte ich noch nicht finden und es gibt kein CloseInternetHandle(); und ich habe nichts gefunden was dahin muss. Wie kann man den download abbrechen ? Das mit Vista ist mir eigentlich "noch" egal. Wenns so weit ist habe ich wieder was zu tun :) . Gibt es bei den beiden Funktionen einen Unterschied in der Effizienz ? Sonst nehme ich eben das Vista kompatiblere. MfG Edit: CloseInternetHandle(); = InternetCloseHandle(); :wall: |
Re: URLDownloadToFile Speed anzeigen
Zitat:
Hätte ich vielleicht vor der Frage schon tun sollen... Hier habe ich nun die ganze funktion noch einmal ein bisschen erweitert, sie findet jetzt die Dateigröße heraus. Und ich habe sie noch ein bisschen für mich angepasst. Das Problem ist, die bereits heruntergeladenen bytes werden irgendwie nicht richtig gezählt, da kommen zu viel raus, ein bisschen weniger als doppelt so viel. Habe ich da einen Denkfehler drin ?
Delphi-Quellcode:
function TForm1.DownloadFile(const URL: String; const FilePath: String; FileName: String = ''): Boolean; var KbpsCounter, Kbps: Integer; Ticks, BytesRead, acsize, index, codelen: DWORD; Buffer: Array [0..1023] of Byte; hSession, hRequest: HINTERNET; DlFile : File; code : array[1..20] of char; begin Result := False; KbpsCounter := 0; (* Dateinamen festlegen *) if Filename <> '' then Filename := FilePath + FileName else Filename := FilePath + ExtractFileName(Slashtobackslash(URL)); (* Session öffnen *) Label3.Caption := 'connecting ...'; hSession := InternetOpen('AppTitel', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0); if hSession <> nil then begin (* URL öffnen *) hRequest := InternetOpenUrl(hSession, PChar(URL), nil, 0, INTERNET_FLAG_RELOAD, 0); if hRequest <> nil then begin (* checken ob Datei schon existiert *) if FileExists(FileName) then if idOK <> (Application.MessageBox('File already exists. Replace ? ' , PChar(Caption) , MB_OKCANCEL)) then exit; (* Dateigröße herausfinden *) Index:= 0; CodeLen:= 10; HttpQueryInfo(hRequest, HTTP_QUERY_CONTENT_LENGTH, @code, codeLen, Index); Label4.Caption := formatfloat('0.00',Strtoint(Pchar(@code)) / 1024 / 1024)+' mb'; (* Download starten *) Label3.Caption := 'starting ...'; AssignFile(DlFile, FileName); try Rewrite(DlFile, 1); Ticks := GetTickCount; while True do begin (* Daten auslesen *) Label3.Caption := 'loading ...'; if InternetReadFile(hRequest, @Buffer, 1024, BytesRead) = False then Break; (* bereits geladene kbps berechnen *) acsize := acsize + BytesRead; Label1.caption := formatfloat('0.00', acsize / 1024 / 1024) + ' mb'; (* kbps jede Sekunde berechnen *) Inc(KbpsCounter, BytesRead); if Ticks <= (GetTickCount - 1000) then begin Kbps := KbpsCounter div 1024; if Kbps < 1000 then Label2.Caption := intToStr(Kbps) + ' kb/s' else Label2.Caption := formatfloat('0.00', Kbps / 1024) + ' mb/s'; KbpsCounter := 0; Ticks := GetTickCount; end; (* In Datei schreiben *) if BytesRead <> 0 then BlockWrite(DlFile, Buffer, BytesRead) else //Download beendet begin Label3.Caption := 'finished'; Result := True; Break; end; if usercancel then begin Label3.Caption := 'canceled'; Label2.Caption := ''; Result := False; Break; end; Application.ProcessMessages; end; finally CloseFile(DlFile); InternetCloseHandle(hRequest); end; end; InternetCloseHandle(hSession); end; end; |
Re: URLDownloadToFile Speed anzeigen
acsize 0 setzen bevor du die Bytes in der Schleife drauf addierst?
|
Re: URLDownloadToFile Speed anzeigen
Den Fehler habe ich schon bemerkt, hat aber an der Sache nix geändert.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz