![]() |
Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Hey Leute.
Delphi-Quellcode:
Wie ihr seht will ich, wenn auf Button1 geklickt wird 2 Datein heruntergeladen werden. Dieser Downloadprozess soll in einer ProgressBar angezeigt werden. Ich habe meinen Code von
procedure TForm1.Button1Click(Sender: TObject);
var Ziel: string; Ziel2: String; URL: String; URL2: String; Name1: String; Name2: String; lStream: TFileStream; lStream2: TFileStream; Pfad: String; begin lStream.Free; lStream2.Free; Name1:='Premaidercraft '+Memo3.Lines[0]+'.zip'; Name2:='mcpatcher-'+Memo3.Lines[1]+'.exe'; Pfad := IncludeTrailingPathDelimiter(UserAppData) + '.minecraft\texturepacks'; Ziel := IncludeTrailingPathDelimiter(Pfad) + Name1; Ziel2 := IncludeTrailingPathDelimiter(Pfad) + Name2; URL:=Memo2.lines[0]; URL2:=Memo2.Lines[1]; try lStream:=TFileStream.Create(Ziel, fmCreate); finally try idHTTP1.Get(URL, lStream); idHTTP1.Get(URL2, lStream); finally lStream.Free; lStream2.Free; If CheckBox1.checked=true Then ShellExecute(Application.Handle,'open',PChar(Pfad + Memo3.Lines[0] + '.exe'),nil,PChar(Pfad),sw_ShowNormal); end; end; Memo1.Lines[17]:='skin:Premaidercraft '+Memo3.lines[0]+'.zip'; Memo1.Lines.SaveToFile(UserAppData + '\.minecraft\options.txt'); end; ![]() Bei mir kommt aber beim downloaden der zweiten Datei ein Fehler. "Wert für IOHandler ist ungülig". Warum ? |
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Wieso gibst Du Objekte frei, die Du gar nicht erzeugst? Und die Verwendung von try-finally ist ein wenig, na sagen wir mal "kreativ". Ich würde Dir raten: schreibe Dir eine Methode zum Herunterladen, der Du die Quell-URL und die Zieldatei als Parameter übergibst. Dann rufst Du nur noch diese auf.
|
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Meinst du ich soll anstatt lStream meinen Dateipfad reinschreiben ? Sorry bin noch ein ziemlicher Anfänger und verstehe nicht genau was du meinst
|
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Ich meinte etwas in der Art:
Delphi-Quellcode:
function TForm1.DownloadFile(const SrcURL, DestFile: string): Boolean;
begin //Code end; ... DownloadFile(URL, Ziel); DownloadFile(URL2, Ziel2); |
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
aber dann funktionert doch die ProgressBar nicht mehr ??
|
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Und wieso sollte sie nicht? Du kannst doch in der DownloadFile-Methode weiterhin den Indy-HTTP-Client benutzen.
|
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Okay ich werd mal schaun :O
|
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Ne, DownloadFile gibt es anscheind bei Delphi7 garnicht ??
|
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Du hast keinen Plan, was du machst oder?
Download könnte so aussehen:
Delphi-Quellcode:
procedure TForm2.Download(Url, Filename: AnsiString);
var FileStream: TFileStream; begin FileStream := TFileStream.Create(Filename, fmCreate); try try IdHTTP1.Get(Url, FileStream); except on E: Exception do Exception.Create('Fehler beim Runterladen!' + #13#10 + E.Message); end finally FileStream.Free; end; end; |
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Zitat:
Vermutlich schliesst Indy aber automatisch den Stream sobald das (erste) GET abgeschlossen ist. |
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Zitat:
Zitat:
[EDIT] Habe jetzt 2 procedures (Download1 und Download2) in denen jeweils eine der 2 Datein heruntergeladen wird. Trotzdem der Fehler "Wert für IOHandler ist ungültig" Hier der Code:
Delphi-Quellcode:
procedure Download1;
var FileStream: TFileStream; URL: String; Name: String; Pfad: String; begin Pfad := (UserAppData) + '\.minecraft\texturepacks\'; ForceDirectories(Pfad); Name:='Premaidercraft '+Form1.Memo3.Lines[0]+'.zip'; URL:=Form1.Memo2.lines[0]; FileStream := TFileStream.Create(Pfad + Name, fmCreate); try try Form1.IdHTTP1.Get(Url, FileStream); except on E: Exception do Exception.Create('Fehler beim Runterladen!' + #13#10 + E.Message); end finally FileStream.Free; end; end; procedure Download2; var FileStream: TFileStream; URL: String; Name: String; Pfad: String; begin Pfad := IncludeTrailingPathDelimiter(UserAppData) + '\.minecraft\texturepacks\'; Name:='mcpatcher-'+Form1.Memo3.Lines[1]+'.exe'; URL:=Form1.Memo2.lines[1]; FileStream := TFileStream.Create(Pfad + Name, fmCreate); try try Form1.IdHTTP1.Get(Url, FileStream); except on E: Exception do Exception.Create('Fehler beim Runterladen!' + #13#10 + E.Message); end finally FileStream.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var Pfad: String; begin Download1; Download2; Pfad := IncludeTrailingPathDelimiter(UserAppData) + '.minecraft\texturepacks'; If CheckBox1.checked=true Then ShellExecute(Application.Handle,'open',PChar(Pfad + Memo3.Lines[0] + '.exe'),nil,PChar(Pfad),sw_ShowNormal); Memo1.Lines[17]:='skin:Premaidercraft '+Memo3.lines[0]+'.zip'; Memo1.Lines.SaveToFile(UserAppData + '\.minecraft\options.txt'); end; |
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe es geahnt und habe das ganze Projekt schon mal gepackt.
|
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Zitat:
Also bei mir sieht es inzwischen so aus:
Delphi-Quellcode:
Ich bekomme bei idHTTP.get eine "Zugriffsverletzung" :(
procedure TForm1.Download(Url, Filename: AnsiString);
var FileStream: TFileStream; begin try IdHTTP1.Get(Url, FileStream); except on E: Exception do Exception.Create('Fehler beim Runterladen!' + #13#10 + E.Message); end; FileStream.Free; end; procedure TForm1.Button1Click(Sender: TObject); var Pfad: String; Name1: String; Name2: String; Ziel1: String; Ziel2: String; begin Button1.Caption:='Installing...'; Pfad := IncludeTrailingPathDelimiter(UserAppData) + '\.minecraft\texturepacks\'; Name1 :='Premaidercraft '+Memo3.Lines[0]+'.zip'; Name2 :='mcpatcher-'+Memo3.Lines[1]+'.exe'; Ziel1 := Pfad + Name1; Ziel2 := Pfad + Name2; try Download(Memo2.Lines[0], Ziel1); Download(Memo2.Lines[1], Ziel2); except on E: Exception do Button1.Caption:='Error while downloading'; end; If CheckBox1.checked=true Then ShellExecute(Application.Handle,'open',PChar(Pfad + Memo3.Lines[0] + '.exe'),nil,PChar(Pfad),sw_ShowNormal); Memo1.Lines[17]:='skin:Premaidercraft '+Memo3.lines[0]+'.zip'; Memo1.Lines.SaveToFile(UserAppData + '\.minecraft\options.txt'); end; |
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Also da noch was kaputt zu machen ist schon eine Kunst. Warum hast du die Zeile gelöscht in der das FileStream Objekt erzeugt wird?
|
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Zitat:
Aber wenn ich den jetzt wieder einsetze, kommt nach dem Downloaden der Fehler "Wert für IOHandler ist ungültig". Wie ganz am Anfang auch :( Was ja auch bei deinem Beispiel beim Downloaden kam |
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Auch wenn du die Exe ausgeführt hast?
|
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Zitat:
Bei mir hat nur die exe (zweite Datei) 0KB. Die erste stimmt. Ich denke auch deswegen wird die exe danach nicht ausgeführt. |
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
.. wenn Du die zwei Dateien manuell per Webbrowser lädtst, sind dann beide in Ordnung?
Mag ja sein, dass die zweite Datei auf dem Server auch nur 0KByte hat. Kann schonmal passieren, wenn eine Binärdatei im Ascii-Mode hochgeladen wird. Grüße Klaus |
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Zitat:
Edit: Gerade nachgeschaut. Auch per http-Links (der im Webbrowser funktioniert) hat die exe 0KB |
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Zitat:
https - geht auf port 443 bei https ist die Übertragung per SSL/TLS verschlüsselt. Überprüfe einmal die Dateien auf dem Server (per FTP) auf Größe. Grüße Klaus |
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Danke dir. Habs jetzt auf meinem Webspace geladen. Da geht es prima :D
Werde es jetzt einem Praxistest unterziehen. Falls dort nochmal Fragen aufkommen melde ich mich :D LG |
AW: Indy idHTTP - Downloadprozess - Wert für IOHandler ist ungültig
Damit TIdHTTP vom https laden kann, muss der TIdOpenSSLIOHandler der IOHandler-Eigenschaft zugewiesen werden. Außerdem müssen die OpenSSL-Dlls im Programmverzeichnis liegen. Vermutlich hast du das nicht gemacht und deshalb kommt der Fehler wegen falschen IO-Handler.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:48 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