Einzelnen Beitrag anzeigen

DrUArn

Registriert seit: 20. Mär 2003
130 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: tstringlist.loadfromstream liest mehr ein, als es soll

  Alt 27. Nov 2011, 20:04
@Bummi: Wie am Start gesagt - 'ne Fingerübung - wollte nur ein allg. Object probieren, welches Daten in eine Stream speichert - also etwa ein Integer, einen String, ein Byte-Array und eben falls nötig - eine Stringliste.
Delphi-Quellcode:
procedure tstorepersistent_UA.writeotherdata(astream: tstream);
  var i:integer;
      a:char;
begin
astringlist.SaveToStream(astream);
a:=#0;
astream.Write(a,sizeof(a));

astream.write(F_int,sizeof(F_int));
astream.write(i,sizeof(i));
astream.write(pointer(astring)^,i);
astream.Write(f_maxblocksize,sizeof(f_maxblocksize));
astream.Write(abytearray^,maxblocksize);
end;

procedure tstorepersistent_UA.readotherdata(astream: tstream);
 var i:integer;

begin

astringlist.Clear;
astringlist.LoadFromStream(astream);

astream.Read(F_int,sizeof(f_int));
astream.read(F_char,sizeof(F_char));
astream.Read(i,sizeof(i));
SetLength(F_string,i div sizeof(char));
astream.Read(pointer(f_string)^,i);
FreeMem(abytearray);
astream.Read(F_maxblocksize,sizeof(maxblocksize));
getmem(abytearray,maxblocksize);
astream.Read(abytearray^,maxblocksize);
end;

Ohne eine Stringliste funktioniert das. Mit Stringliste kommt's zu Störungen.
Speichere ich z.B. obiges 2 mal und lade es auch 2 mal, dann ist die zweite geladene Stringliste leer (count=0) - womit Du wohl recht hast -das erste Lesen führt schon zum Ende des Streams, auch wenn irgendwo #0 steht und egal, ob ich die Liste am Anfang oder am Ende des Objects schreibe und lese - so sieht es jedenfalls beim Probieren aus.

Mfg Uwe
  Mit Zitat antworten Zitat