TIdHTTP War Get() erfolgreich?
-
Das true war zuviel
-
das hilft mir leider trotzdem nicht weiter

-
Solange du hier keinen Quelltext zeigst -> was soll man sagen -> die Komponenten arbeiten in Großen und ganzen fehlerfrei.
Schau in die Hilfe
Versuche mal nicht mit einem Stream zu arbeiten, sondern dirket in eine Datei
Besteht wirklich eine Verbindung?
und, und....
-
hallo
was genau meinst du? ich nutze nun TFileStream oder was wäre am besten?
Bei TFileStream habe ich jetzt allerdings das problem das man beim erzeugen des objekts direkt einen pfad angeben muss. mit dem mode fmCreate wird dann die datei gleich erstellt. Sowas ist jedoch nicht gut den ich will die datei erst dann erstellen wenn Size grösser als 0 ist.Oder wie genau soll ich das nun machen?
-
ich verzweifle

hier ein wenig code:try { try { //filename ändert sich vortlaufend stream = new TFileStream(filename, fmCreate); IdHTTP1->Get(url, stream); ++success; } catch(...) { if(FileExists(filename)) { DeleteFile(filename); } } } __finally { delete stream; }das problem ist das success kleiner ist als die dateien auf meinem rechner. das heisst also das entweder die datei erstellt wurde und dann beim catch block bei einem TIdHTTP fehler nicht wieder gelöscht wurde, oder aber keine ahnung

ich gehe eigentlich davon aus das success nur dann inkrementiert wird wenn Get() keine exception auslöst, falls doch dann springt es ja eigentlich nicht zur zeile ++success?!? sondern eben zum catch block und dort gehe ich eigentlich davon aus das die erstellte datei von stream eben wieder gelöscht wird. Insofern gehe ich eigentlich davon aus das success den wert der tatsächlich runtergeladenen dateien auf meinem rechner hat.

-
Bist du sicher, dass im "Downloadverzeichnis" keine alten Dateien rumliegen, die du fälschlicherweise mitzählst?
-
Ja das verzeichnis habe ich zum erneuten test gelöscht und neu begonnen. Richten tu ich mich programtechnisch nur an den wert von success und windows technisch an den wert der anzahl dateien im verzeichnis. Leider stimmt das nie überein.

Was mache ich da blos falsch oder wie kann man das effizienter lösen das ich wirklich den wert der erstellten bzw. runtergeladenen dateien ermitteln kann und wenn eben ein TIdHTTP::Get() fehler auftritt, die (trotzdem) erstellte datei von TFileStream wieder zu löschen (da sie ja leer ist).
-
hab nun mal ein paar messageboxen im catch block reingemacht. also die datei die zu löschen ist existiert aber DeleteFile konnte dann die datei nicht löschen. Jetzt ist die frage wieso? Ist auf die datei noch zugriff bevor ich das TFileStream objekt zerstöre also den speicher wieder frei gebe? Oder hat es was mit dem parameter fmCreate zu tun? muss da noch ein zweiter parameter hin?
-
scheinbar liegt es tatsächlich daran das das objekt stream noch nicht freigegeben wurde. jetzt frage ich mich allerdings wo ich den speicher wieder freigeben soll? derzeit habe ich dies ja im __finally block. jetzt müsste ich dies aber im catch block tun und zwar unmittelbar vor dem DeleteFile(). Was aber wenn es keine exception gab? Dann wird stream nicht zerstört.
was tun?
-
wäre es sinnvoll wenn ich das stream objekt im catch block zerstöre und im __finally block auch aber zuerst abfrage ob der zeiger NULL ist?