Hi!
Ich habe mir für mein Programm nen kleinen Autoupdater geschrieben.
Aber der Download ist irgendwie richtig langsam.
Ich habe den Download nach folgendem Beispiel erstellt:
http://www.delphipraxis.net/internal...ct.php?t=56872
Das Programm lädt jetzt pro 3Sekunden ca.40kb.
Die 40kb kommen daher, dass die ProgressBar alle 40kb aktualisiert wird.
Wenn ich nun festlege, dass die ProgressBar alle 512kb aktualisiert wird geht der Download wesentlich shcneller, aber die ProgressBar springt halt.
Ich vermute, das Problem kommt daher, dass ich 2 Dateien lade.
Deswegen habe ich 2 Streams und auch zwei IdHTTP's von
Indy.
Nunja hiermal mein Code, vielleicht sieht jemand von euch woran es genau liegt, bzw. kann mir sagen, wie ich den Download von 2 Dateien sonst machen könnte.
Delphi-Quellcode:
const
cFileSplitSize : Int64 = 40*1024; //40 KB größe stücke wird die Datei zerhackt
Delphi-Quellcode:
function GetSizeName(const Size : int64): String; //Umschreiben der Größen
begin
Result := 'Fehler';
if Size = -1 then exit;
if Size < 1024 then
begin
Result := inttostr(Size)+' Byte';
exit;
end;
if (1024 <= Size) and (Size < 1048576) then
begin
Result := floattostr((round((Size/1024)*100))/100)+' KB';
exit;
end;
if (1048576 <= Size) and (Size < 1099511627776) then
begin
Result := floattostr((round((Size/1048576)*100))/100)+' MB';
exit;
end;
if Size > 1099511627776 then
begin
Result := floattostr((round((Size/1099511627776)*100))/100)+' GB';
end;
end;
Delphi-Quellcode:
begin
Status.Font.Color:=clRed; //Anzeigen, dass neues Update gefunden
Status.Caption:='Update wurde gefunden!'; //--"--
BytesKopiert:=0; //Downloader beginnt
Progress.Position:=0;
UpdateHTTP.Head('http://world-fifa-league.de/files/Starter_Update/fifa.db');
UpdateHTTP2.Head('http://world-fifa-league.de/files/Starter_Update/ger.db');
BytesInsgesamt:=UpdateHTTP.Response.ContentLength + UpdateHTTP2.Response.ContentLength; //Schreiben der Länge in String
if BytesInsgesamt=-1 then
begin
Status.Font.Color:=clRed;
Status.Caption:='Normales Herunterladen';
lStream1:=TFileStream.Create((ExtractFilePath(Application.ExeName)+'WFL_Daten\fifa.db'), fmCreate or fmShareDenyNone);
lStream2:=TFileStream.Create((ExtractFilePath(Application.ExeName)+'WFL_Daten\ger.db'), fmCreate or fmShareDenyNone);
try //Herunterladen der Dateien
Status.Font.Color:=clLime;
Status.Caption:='Download';
UpdateHTTP.Get('http://world-fifa-league.de/files/Starter_Update/fifa.db',lStream1);
UpdateHTTP2.Get('http://world-fifa-league.de/files/Starter_Update/ger.db',lStream2);
finally //Streams wieder freigeben
if Assigned(lStream1) then lStream1.Free;
if Assigned(lStream2) then lStream2.Free;
end;
Status.Font.Color:=clLime;
Status.Caption:='Download beendet';
exit;
FrmUpdater.Close;
end;
Progress.Max:=BytesInsgesamt; //Download mit Progressbar
lStream1:=TFileStream.Create((ExtractFilePath(Application.ExeName)+'WFL_Daten\fifa.db'), fmCreate or fmShareDenyNone);
lStream2:=TFileStream.Create((ExtractFilePath(Application.ExeName)+'WFL_Daten\ger.db'), fmCreate or fmShareDenyNone);
lStream1.Position:=0;
lStream2.Position:=0;
try
repeat //Verhindern, dass sich das Programm aufhängt
Application.ProcessMessages;
Status.Font.Color:=clLime;
Status.Caption:='Download';
UpdateHTTP.Get('http://world-fifa-league.de/files/Starter_Update/fifa.db',lStream1);
UpdateHTTP2.Get('http://world-fifa-league.de/files/Starter_Update/ger.db',lStream2);
Progress.Position := BytesKopiert;
Status.Caption := GetSizeName(BytesKopiert)+'/'+GetSizeName(BytesInsgesamt);
BytesKopiert := BytesKopiert+cFileSplitSize;
until (BytesKopiert >= BytesInsgesamt); //Schleife beenden wenn datei fertig
finally
if Assigned(lStream1) then lStream1.Free; //FileStream freigeben wenn gesetzt
if Assigned(lStream2) then lStream2.Free;
end;
Status.Font.Color:=clLime;
Status.Caption:='Fertig';
Progress.Position:=100;
FrmUpdater.Close;
end
else
Status.Font.Color:=clLime;
Status.Caption:='Kein Update gefunden!';
FrmUpdater.Close;
end;
end;
end;
So das war es erstmal.
Vielen Dank schonmal für Antworten
LG