Einzelnen Beitrag anzeigen

Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#5

Re: Probleme mit TMemoryStream

  Alt 7. Jun 2006, 10:39
Hallo!

Musst du nicht unbedingt, es gibt ja analog zu SaveToStream die Methode LoadFromStream. Du musst nur vorher den Stream an die richtige Stelle schieben (in diesem Falle wohl der Anfang, also Str.Position:=0).

Allgemein ergibt sich jedoch die Problematik, daß LoadFromStream den gesamten Streaminhalt ab der aktuellen Position einlesen will, sodaß du dort noch gesondert vorgehen musst, wenn du nach dem Memodaten noch andere Sachen wie Integerwerte oder Strings ablegen willst. Ich speichere zum Beispiel in einigen Programmen Stringlisten, indem ich zuerst die Anzahl Zeilen in den Stream schreibe und dann die einzelnen Zeilen.

Dabei wird für jede Zeile wiederum die Anzahl Zeichen gespeichert, anschliessend dann die Zeichen selber. Und genau dort kommt dann diese PChar-Verwendung ins Spiel (im Code hier ist´s einfach Pointer).

Delphi-Quellcode:
procedure SaveStrToStream(const Stream: TStream; const Value: String);
var Len: Word;
begin
  Len := Length(Value);
  Stream.WriteBuffer(Len, SizeOf(Len));
  if Len > 0 then
    Stream.WriteBuffer(Pointer(Value)^, Len);
end;

procedure LoadStrFromStream(const Stream: TStream; var Str: String);
var Len: Word;
begin
  Stream.ReadBuffer(Len, SizeOf(Len));
  SetLength(Str, Len);
  if Len > 0 then
    Stream.ReadBuffer(Pointer(Str)^, Len);
end;
Cu,
Udontknow
  Mit Zitat antworten Zitat