![]() |
Problem mit IdHTTP.get mit Fortschrittsanzeige
Hi
ich bin grad dabei mir nen updater zu schreiben. Zum downloaden mit Fortschrittsanzeige über IdHTTP.get hab ich ![]()
Delphi-Quellcode:
Das Problem ist folgende Fehlermeldung:
function Downloaden(Source: String): Boolean;
var BytesKopiert, BytesInsgesamt : int64; lStream: TFileStream; con: TextFile; begin AssignFile(con, 'CON:'); Rewrite(con); Write(con, Source + ' wird heruntergeladen... '); BytesKopiert := 0; IdHTTP1.Head('http://server.de/'+Source); BytesInsgesamt := IdHTTP1.Response.ContentLength; if BytesInsgesamt = -1 then begin lStream:=TFileStream.Create(AppPath + Source, fmCreate or fmShareDenyNone); try idHTTP1.Get('http://server.de/'+Source, lStream); finally if Assigned(lStream) then lStream.Free; end; Write(con, #13, Source + ' wird heruntergeladen... OK' + CR); CloseFile(con); exit; end; lStream:=TFileStream.Create(AppPath + Source, fmCreate or fmShareDenyNone); lStream.Position := 0; try repeat if (BytesInsgesamt-BytesKopiert) > cFileSplitSize then begin IdHttp1.Request.Range := Format('%d-%d', [BytesInsgesamt, (BytesKopiert+cFileSplitSize-1)]); end else IdHttp1.Request.Range := Format('%d-', [BytesKopiert]); Application.ProcessMessages; IdHTTP1.Get('http://server.de/'+Source, lStream); // <-- Hier tritt das Problem auf BytesKopiert := BytesKopiert+cFileSplitSize; Write(con, #13, Source + ' wird heruntergeladen... ', GetSizeName(BytesKopiert)+'/'+GetSizeName(BytesInsgesamt), ' [', FloatToStr((BytesKopiert/BytesInsgesamt)*100), '%]'); until (BytesKopiert >= BytesInsgesamt); finally if Assigned(lStream) then lStream.Free; CloseFile(con); end; Write(con, #13, Source + ' wird heruntergeladen... ', GetSizeName(BytesInsgesamt), ' OK', CR); end; Zitat:
Das Programm ist eine Konsolenanwendung, und wenn ich die Datei ohne Fortschrittsanzeige runterlade:
Delphi-Quellcode:
gehts...
lStream := TFileStream.Create(AppPath + Source, fmCreate);
IdHTTP1.Get('http://server.de/'+Source, lStream); lStream.free; was mach ich falsch? mfg.Dominik |
Re: Problem mit IdHTTP.get mit Fortschrittsanzeige
was ist das den für ein server?
unterstützt der forgesetztes downloaden? ich nehme an du nutzt indy 10 oder? |
Re: Problem mit IdHTTP.get mit Fortschrittsanzeige
nur wegen der Fortschrittsanzeige lädst du in mehreren Stücken herunter? Lade doch in einem stück runter dann hast du auch nicht das Problem das es nicht funktioniert wenn der Server es nicht unterstützt.
|
Re: Problem mit IdHTTP.get mit Fortschrittsanzeige
Zitat:
![]() ![]() Ja, Indy 10 wird benutzt. Ob der Server fortgesetztes downloaden unterstützt weiß ich net :( Zitat:
Muss aber nicht unbedingt sein ;) |
Re: Problem mit IdHTTP.get mit Fortschrittsanzeige
Liste der Anhänge anzeigen (Anzahl: 2)
Halt Falsch:
Es gibt doch die Ereignisse: onWork,Begin,End. Die einfach benutzen. Im Anhang findest du eine Form, die Proceduren bereit stellt, die dann nur noch von deinen TIdHTTP aufgerufen werden müssen, und schon hast du einen Fortschritt im wahrsten Sinne des Wortes :) |
Re: Problem mit IdHTTP.get mit Fortschrittsanzeige
und falls dir die OnWork-Ereignisse zu selten kommen oder ungenau sind kannst du auch einfach eine eigene Streamklsse ableiten und die Write-Methode überschreiben um zu zählen wieviel schon geschrieben wurde (hab ich auch mal ein Beispiel gepostet)
[Edit] hier der link: ![]() [/Edit] |
Re: Problem mit IdHTTP.get mit Fortschrittsanzeige
hmmm... ok, ich werds ohne Fortschrittsanzeige machen^^
danke an alle die sich die mühe gemacht haben mir zu helfen :cheers: noch eine kleine frage, ich will dafür nicht extra nen neuen thread aufmachen: mein updater wird aus dem hauptprogramm mit shellexecute mit sw_Hide aufgerufen, dann ist die Konsole ja nicht sichtbar. wenn jetzt aber ein update verfügbar ist will ich die konsole wieder anzeigen... wie geht das? mfg.Dominik |
Re: Problem mit IdHTTP.get mit Fortschrittsanzeige
Warum es geht doch mit Fortschritts anzeige du muss nur die Events TIdHTTP.OnWork, TIdHTTP.OnWorkBegin und TIdHTTP.OnWorkEnd nutzen und schon bis du fertig.
mfg, Björn |
Re: Problem mit IdHTTP.get mit Fortschrittsanzeige
Zitat:
Delphi-Quellcode:
kommt an der markierten Stelle folgende fehlermeldung:
procedure IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer); begin // Test end; IdHTTP1.OnWorkBegin := IdHTTP1WorkBegin; // <-- Zitat:
|
Re: Problem mit IdHTTP.get mit Fortschrittsanzeige
Ähm. Okay. Da ist jemand Designerabhängig xD
du musst die events in ne klasse packen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 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 by Thomas Breitkreuz