TMemoryStream: Exception bei Write



  • Ich lade immer kleine Teile runter.

    z.B. 8KB. (Siehe Startpunkt und EndPunkt bei Indy HTTP)
    Danach speichere ich diese ab.

    Wenn ich jedoch Teile mit mehr als 8KB downloade kommt beim Schreiben o.g. Fehler.

    Ich möchte aber größere Teile downloaden, da der gesamte Prozess sonst zu lange dauert.

    Jo



  • Für Prozesse die zu lange dauern helfen Threads ganz nett...

    Aber ich hab immernoch nicht begriffen wieso du, wenn du Test2 in das File schreibst, nicht einfach die echte Grösse der in Test2 vorhandenen Daten abgibst sondern nur den Theoretischen Wert?



  • Auch wenn ich Test2->Size angebe kommt der Fehler. Hatte ich zuerst stehen.

    An Threads hatte ich auch schon gedacht, aber das ist für mich eher Neuland und ich dachte mir es geht auch ohne.

    Jo



  • Hmmm und Test2 ist gültig?



  • Wie wäre es mit TFileStream, da TMemoryStream alles in den RAM schreibt, was nicht gerade sehr schön ist... und zweitens... wieso 2 Streams...?
    Wenn du Dateien herunterladen willst, mach das so:

    TFileStream* fs=new TFileStream("C:\\Test.bin",fmCreate);
    IdHTTP1->Get(Edit1->Text,fs);
    delete fs;
    

    Und dann kannst du im IdHTTP1 auch die Ereignisse verwenden, z.B. Application->ProcessMessages(); aufrufen, etc.. sodass man nebenher immernoch Buttons drücken kann, etc.



  • Erstmal vielen Dank euch allen.

    Ich habs jetzt mit den FileStreams hinbekommen.

    Zwar bekomme ich jetzt noch nen Fehler an den Kopf geworfen, wenn ich einen FileStream laden möchte, aber das bekomm ich schon hin.

    Danke,
    Jo



  • Hi,

    wie es ausseiht machst du das selbe wie ich. Ein Frage, wie hast du das mit den Ports hinbekommen ? Wenn du einmal eine HTTP Klasse auf einen bestimmten BoudnPort connecten lässt, dann wird dieser nicht mehr freigegeben(erst nach 4/5 min Löschen der Klassem, wohl von von windoof). Ein Lösung ist eine globale HTTP Classe zu verwenden und damit alle HTTP zugriffe zu erledigen. so habe ich das gemacht, gefällt mich aber nicht unbedingt.

    Hast du herausgefunden, wie man einen Port wieder freigibt ? Sachen wie Socket->Close() etc. zeigt keine Wirkung.

    Danke



  • Bitte die Faustregel beachten: ein Thema pro Thread, ein Thread pro Thema!
    Ein Link auf dein anderes Problem wäre ok, das "Anzetteln" einer Offtopic-Diskussion hingegen ist unschön.

    Der unglaublich kritikfähige, gleich eingeschnappte Moderator.

    😉



  • Endlich mal nett 🙂

    Du hast recht, ich bin noch lange nicht perfekt im Punkte Forum-Verhaltens-Regeln



  • Jansen schrieb:

    Der unglaublich kritikfähige, gleich eingeschnappte Moderator.

    Dem kann ich aus Erfahrung nur zustimmen 😉

    - Der gleich einschnappende User

    😉

    NOTE: Offtopic ist jetzt aber genug ^^


Anmelden zum Antworten