![]() |
Speichern von Objekten mit Stream
Grüss euch!
Folgendes Problem: Ich möchte bestimmte (selbst gebastelte) Objekte via Stream in ein file (bspl. *.txt) speichern, und dann wieder daraus herauslesen. Wie macht man das? Bislang versuchte ich die Adresse des Objektes zu speichern und dann so wieder daran zu gelangen: // Speichern // p: ^TmyObject; // Stream: TmyStream; // tmpObj: TmyObject for count := 0 to SomeInteger do begin tmpObj := myObjectList.myObjects[count]; p := @tmpObj; count2:= sizeOf(p); Stream.Write(count2,SizeOf(integer)); Stream.Write(p,SizeOf(p)); end; // das Lesen wäre dann analog... for count1 := 0 to SomeInteger do begin Stream.Read(count2,sizeOf(integer)); Stream.Read(p,count2); tmpObj := p^; end; Ich erhalte hiermit zwar den selben wert für p (z.B. $12F55C), wie er beim Schreiben auch abgespeichert wurde, aber dummerweise für jeden Schleifendurchgang immer wieder den selben... Nützt also nix! Kann mir jemand helfen??? Danke! |
Re: Speichern von Objekten mit Stream
also die adresse zu speichern ist nicht sehr sinnvoll.
beim nächsten Programmstart hat das objekt garantiert nicht mehr die selbe adresse und auf der gespeicherten adresse steht etwas völlig anderes. speicher das objekt direkt
Delphi-Quellcode:
tmpObj := myObjectList.myObjects[count];
Stream.Write(tmpObj,SizeOf(tmpObj)); |
Re: Speichern von Objekten mit Stream
Hm, danke schon mal für den Hinweis. Tatsächlich funktioniert es, wenn ich das Objekt direkt hinein schreibe. :lol:
Aber nur solange wie das Programm noch läuft. Sprich wenn ich meine Objekte abgespeichert habe, dass Programm beende, es wieder starte und DANN die Datei einlesen will, klappt's nicht mehr. Ich hab bereits versucht, beim Schreibem Kopien der Objekte reinzuschmeissen, aber irgendwie gehen sie dann doch verloren... Wie umgeht man dieses Problem? Danke nochmals...! |
Re: Speichern von Objekten mit Stream
es kann sein das deine objekte selber speicher dynamisch anfordern.
du kannst ja mal versuchen neben dem Count auch die Size abzuspeichern also
Delphi-Quellcode:
und dann beim lesen
tmpObj := myObjectList.myObjects[count];
Stream.Write(SizeOf(tmpObj),sizeof(integer)); Stream.Write(tmpObj,SizeOf(tmpObj));
Delphi-Quellcode:
es kann sein das deine Objekt unterschiedlich gross sind
var
groesse:integer; Begin Stream.Read(groesse,sizeof(integer)); Stream.Read(tmpObj,groesse); |
Re: Speichern von Objekten mit Stream
:cry: ne, geht au ned...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 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