AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Speichern von Objekten mit Stream

Ein Thema von frodo81 · begonnen am 23. Nov 2004 · letzter Beitrag vom 23. Nov 2004
Antwort Antwort
frodo81

Registriert seit: 19. Nov 2004
3 Beiträge
 
#1

Speichern von Objekten mit Stream

  Alt 23. Nov 2004, 07:46
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!
  Mit Zitat antworten Zitat
der-C

Registriert seit: 29. Okt 2004
68 Beiträge
 
Delphi 6 Professional
 
#2

Re: Speichern von Objekten mit Stream

  Alt 23. Nov 2004, 08:13
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));
  Mit Zitat antworten Zitat
frodo81

Registriert seit: 19. Nov 2004
3 Beiträge
 
#3

Re: Speichern von Objekten mit Stream

  Alt 23. Nov 2004, 08:40
Hm, danke schon mal für den Hinweis. Tatsächlich funktioniert es, wenn ich das Objekt direkt hinein schreibe.

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...!
  Mit Zitat antworten Zitat
der-C

Registriert seit: 29. Okt 2004
68 Beiträge
 
Delphi 6 Professional
 
#4

Re: Speichern von Objekten mit Stream

  Alt 23. Nov 2004, 09:44
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
  Mit Zitat antworten Zitat
frodo81

Registriert seit: 19. Nov 2004
3 Beiträge
 
#5

Re: Speichern von Objekten mit Stream

  Alt 23. Nov 2004, 11:32
ne, geht au ned...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:49 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