![]() |
Inhalt einer TStringList in Stream schreiben
Hallo DP'ler!
Ich verzweifle zur Zeit daran den Inhalt einer TStringList in einen Stream zu schreiben :| Zur Zeit verwende ich folgenden Code:
Delphi-Quellcode:
Dabei sehen die Typen so aus:
var Header: TSaveHeader;
Data: TSaveData; i: Byte; fs: TMemoryStream; ... for i:=1 to 8 do begin Data.Spieler[i].Strassen := TStringList.Create; Data.Spieler[i] := Spieler[i]; Header.Capacity[i] := Data.Spieler[i].Strassen.Capacity; end; ... fs := NIL; try fs := TMemoryStream.Create; fs.Write(Header,sizeof(Header)); fs.Write(Data,sizeof(Data)); fs.SaveToFile(dateiname); finally fs.Free; end;
Delphi-Quellcode:
Ich dachte mir schon dass ich den Capacity-Wert der StringList mit speichern
TSaveData = record
Spieler: array [1..8] of TSpieler; Strassen: array [1..40] of TStrasse; aktuellerSpieler: Byte; SpielerAnzahl: Byte; sbFertig: Boolean; sbWuerfeln: Boolean; end; TSaveHeader = record Version: string[10]; Name: string[255]; Kommentar: string[255]; Capacity: array [1..8] of integer; end; TSpieler = record Name: string[50]; Position: byte; Geld: integer; Strassen: TStringList; Spielfigur: byte; Farbe: TColor; end; muss, damit dann beim lesen wieder die richtige Länge rauskommt, aber der sizeof()-Wert einer TSTringList ergibt bei mir immer 4 :shock: Dann hab ich probiert den Inhalt über TStringList.CommaText zu speichern, aber irgendwie bekomm ichs auch nicht hin den resultierenden String im Stream abzulegen :oops: Hoffe jemand weiss Rat. Schonmal Danke im Vorraus! |
Re: Inhalt einer TStringList in Stream schreiben
wie wäre es mit...
Delphi-Quellcode:
;)
.
. . try fs := TMemoryStream.Create; Data.Spieler[i].Strassen.SaveToStream(fs); . . . |
Re: Inhalt einer TStringList in Stream schreiben
Moin!
1. Capacity gibt nur den aktuelle vorgehaltenen Speicher für die Elemente der StringList an und nicht die tatsächliche Anzahl. 2. Du beachtest ja bei den Strings schon ordentlich, das es Shortstrings sein müssen, weil AnsiStrings und WideStrings auch nur Klasseninstanzen sind. Eine TStringList ist erst recht eine Klasse, somit ist ihre Definition immer nur 4 byte gross, weil Instanzenzeiger. Empfehlung: Nutze die SaveToStream Funktion der TStringList und speichere zuvor noch die Länge von Text ab... MfG Muetze1 |
Re: Inhalt einer TStringList in Stream schreiben
Wieder was gelernt :dp:
Also SaveToStream funktioniert einwandfrei. Und LoadFromStream weiss sogar von allein wieviel es Einlesen soll *freu* Danke an alle! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 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-2025 by Thomas Breitkreuz