AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi URLDownloadToFile Speed anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

URLDownloadToFile Speed anzeigen

Ein Thema von ebber · begonnen am 30. Sep 2007 · letzter Beitrag vom 10. Okt 2007
Antwort Antwort
Seite 1 von 2  1 2      
ebber

Registriert seit: 31. Okt 2006
243 Beiträge
 
#1

URLDownloadToFile Speed anzeigen

  Alt 30. Sep 2007, 19:04
Hallo

ich lade etwas mit URLDownloadtoFile mit diesem http://www.delphipraxis.net/internal....php?p=198#198 herunter. Da gibt es aber nichts was den Speed anzeigt ?

Muss man sich den berechnen aus der Dateigröße und dem schon geladenen ?

MfG
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#2

Re: URLDownloadToFile Speed anzeigen

  Alt 30. Sep 2007, 19:46
http://www.delphipraxis.net/internal...t.php?t=119484
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
ebber

Registriert seit: 31. Okt 2006
243 Beiträge
 
#3

Re: URLDownloadToFile Speed anzeigen

  Alt 2. Okt 2007, 00:35
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
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#4

Re: URLDownloadToFile Speed anzeigen

  Alt 2. Okt 2007, 10:15
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 MSDN-Library durchsuchenInternetReadFileEx oder MSDN-Library durchsuchenHttpQueryInfo
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: URLDownloadToFile Speed anzeigen

  Alt 2. Okt 2007, 12:35
Hallo,

Zitat von ebber:
ich lade etwas mit URLDownloadtoFile herunter. Da gibt es aber nichts was den Speed anzeigt? Muss man sich den berechnen aus der Dateigröße und dem schon geladenen?
wenn du beim Ereignis OnProgress() immer die Zeit nimmst (GetTickCount) und den Wert bei ulProgress = 0 zwischenspeicherst, dann kannst du die Ladegeschwindigkeit (kByte/sec) doch leicht berechnen:

Delphi-Quellcode:
var
  kbsec: Double;
begin
  kbsec := ulProgress * 1000 / 1024 / (GetTickCount - StartTickCount);
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: URLDownloadToFile Speed anzeigen

  Alt 2. Okt 2007, 12:42
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
  Mit Zitat antworten Zitat
ebber

Registriert seit: 31. Okt 2006
243 Beiträge
 
#7

Re: URLDownloadToFile Speed anzeigen

  Alt 3. Okt 2007, 13:29
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();
  Mit Zitat antworten Zitat
ebber

Registriert seit: 31. Okt 2006
243 Beiträge
 
#8

Re: URLDownloadToFile Speed anzeigen

  Alt 4. Okt 2007, 15:33
Zitat von ebber:
Hallo

Gibt es bei den beiden Funktionen einen Unterschied in der Effizienz ?
Diese Frage ist immer noch offen, aber ich habe mich bei der andern ein bisschen schlauer gemacht und es sogar fast selbst gelöst.
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;
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#9

Re: URLDownloadToFile Speed anzeigen

  Alt 4. Okt 2007, 18:52
acsize 0 setzen bevor du die Bytes in der Schleife drauf addierst?
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
ebber

Registriert seit: 31. Okt 2006
243 Beiträge
 
#10

Re: URLDownloadToFile Speed anzeigen

  Alt 4. Okt 2007, 19:08
Den Fehler habe ich schon bemerkt, hat aber an der Sache nix geändert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz