Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Speichern von Objekten mit Stream (https://www.delphipraxis.net/34425-speichern-von-objekten-mit-stream.html)

frodo81 23. Nov 2004 07:46


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!

der-C 23. Nov 2004 08:13

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));

frodo81 23. Nov 2004 08:40

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...!

der-C 23. Nov 2004 09:44

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:
tmpObj := myObjectList.myObjects[count];
Stream.Write(SizeOf(tmpObj),sizeof(integer));
Stream.Write(tmpObj,SizeOf(tmpObj));
und dann beim lesen
Delphi-Quellcode:
var
 groesse:integer;
Begin

Stream.Read(groesse,sizeof(integer));
Stream.Read(tmpObj,groesse);
es kann sein das deine Objekt unterschiedlich gross sind

frodo81 23. Nov 2004 11:32

Re: Speichern von Objekten mit Stream
 
:cry: ne, geht au ned...


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz