Progress von Download berechnen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

streetcarp

Betreff: Progress von Download berechnen

BeitragMi, Aug 15, 2007 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
Folgendes Problem..
Ich hatte vor eine Downloadfunktion für ein Programm zu schreiben, sie funktioniert zwar, jedoch bekomm ich den Code für den Progress/Fortschritt nicht gebastelt. Crying or Very sad
Die Dateigröße der Onlinedatei hab ich über "Content-Length" im http request ermittelt und in der Variablen
FILE_SIZE abgelegt. Theoretisch müsste man ja nur die Größe der Onlinedatei mit den Heruntergeladenen Bytes vergleichen und den Prozentsatz errechnen, aber leider weiß ich nicht, wie ich die Größe abfrage der Bytes die ich bereits geladen habe..
Ich habs mit Readavail(tcp) versucht, aber nichts hinbekommen.

Hier der code:
Code: [AUSKLAPPEN]

 file = WriteFile("wallpaper3.jpg")
 tcp = OpenTCPStream("www.aikido-verein-hannover.de",80)
 If tcp=0 Then Print "Verbindung fehlgeschlagen..." : WaitKey : End

 WriteLine tcp, "GET http://www.aikido-verein-hannover.de/img/wallpaper3.jpg HTTP/1.0"
 WriteLine tcp, "Host: www.aikido-verein-hannover.de"
 WriteLine tcp, "Useragent: Browser"
 WriteLine tcp, "Connection: close"
 WriteLine tcp, Chr$(10)

 ;Getting Filesize
 Repeat
   header$=ReadLine$(tcp)
   If Left$(header$,15)="Content-Length:" Then
    header_chars=Len(header$)
    FILE_SIZE=Right(header$,header_chars-16)
    Print "filesize:"+FILE_SIZE+" bytes"
   EndIf
 Until ReadLine$(tcp)=""


 ;Download file
 Repeat
     ;tcp_avail=ReadAvail(tcp)
  WriteByte file, ReadByte(tcp)
 Until Eof(tcp)=1


 ;Close all streams
 CloseTCPStream tcp
 CloseFile file


 Print "download finish"
 WaitKey()
 End


Wäre nett wenn Ihr mir helfen könntet.
Danke.

(PS. Ich hab schon alles im Forum/google,usw.. abgesucht aber nichts passendes speziell auf das Problem gefunden.)

Silver_Knee

BeitragMi, Aug 15, 2007 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du jedes byte einzeln in die datei schreibst kannst du doch einfach einen bytezähler ala count=count+1 machen. die prozentzahl wäre dann:
Code: [AUSKLAPPEN]
p#=float(count)/float(FILE_SIZE)
 

streetcarp

BeitragMi, Aug 15, 2007 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
oh stimmt Very Happy
funktioniert.
Vielen Dank Dir!!

Smily

BeitragDo, Aug 16, 2007 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit einer bank würde es aber viel schneller gehen (nur so btw)
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org
 

streetcarp

BeitragDo, Aug 16, 2007 13:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt steh ich vor einem neuem Problem..
In der Hauptschleife ist meine CPU-Auslastung 100%..
Delay und Waittimer machen die Schleife logischerweise zu langsam für den Download...

Gibt es noch weitere Möglichkeiten den Code so zu bauen, dass die auslastung gering bleibt??
Mein Firefox läd ja auch nicht mit 100% cpu-last.

Danke.

(PS. die Bank hab ich eingebaut, Danke. Aber das Problem mit der CPU besteht weiterhin)
 

Dreamora

BeitragDo, Aug 16, 2007 14:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit Delay(1) in der Hauptschleife sinkt die belastung drastisch.
Ansonsten nein

Und FF etc arbeiten auch mit Sprachen die darauf ausgelegt sind so etwas zu machen, du nicht, du arbeitest mit einer RAD Sprache die nicht auf Core Development ausgelegt ist, entsprechend "schwächer auf der Brust" ist sie, ist dafür auch beträchtlich einfacher zu nutzen
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Smily

BeitragSa, Aug 18, 2007 12:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Siehe oben: mit einer Bank geht der Download fast so schnell wie mit einem Browser...
Allerdings kann man das nur machen, wenn die Dateigröße bekannt ist.

Gruß, Smily041

Code: [AUSKLAPPEN]
time1 = millisecs()
if downloadfile("/header/header.png", "www.blitzforum.de", "C:\header.png") print "erfolg" Else print "fehler"
time2 = millisecs()
Print "Zeit: " + (time2-time1)
delay 5000
   
Function downloadfile(url$, host$, ziel$)
   tcp = OpenTCPStream(host$,80)
   If Not tcp Return 0
   WriteLine tcp, "GET " + url$ + " HTTP/1.0"
   WriteLine tcp, "host: " + host
   WriteLine tcp, ""
   Repeat
      z$ = ReadLine(tcp)
      If Left(z$,16) = "Content-Length: " size = Mid$(z$,17)
   Until ReadLine(tcp) = "" Or Eof(tcp)
   If Eof(tcp) Return 0
   Fileout = WriteFile(ziel$)
   If Not size
      Repeat
         WriteByte fileout, ReadByte(tcp)
      Until Eof(tcp)
   Else
      bank = CreateBank(size)
      ReadBytes bank, tcp, 0, size
      WriteBytes bank, fileout, 0, size
      FreeBank bank
   End if
   CloseFile fileout
   CloseTCPStream tcp
   Return 1
End function
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group