Entwickler-Ecke

Dateizugriff - TMemoryStream: Leer?


NetZwerg - Mo 03.04.06 22:51
Titel: TMemoryStream: Leer?
Hi,

ich habe mir eine StringList erstellt, diese Inhalte in einen MemoryStream gespeichert und direkt danach wieder geladen. Vorher ist was in der StringList vorhanden, im MemoryStream ist auch das drin, was drin sein soll, nur nach dem Laden ist die StringList leer.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
function TForm1.Param(Str: String; Param: Integer): String;
var
  TheStrings: TStringList;
  TheStream: TMemoryStream;
begin
  TheStrings:=TStringList.Create;
  TheStrings.Add(Stringreplace(Str,' ',#13#10,[rfreplaceall]));
  TheStream:=TMemoryStream.Create;
  TheStrings.SaveToStream(TheStream);
  TheStrings.LoadFromStream(TheStream);  
  try
    Result:=TheStrings.Strings[Param-1];
  except
    Application.ProcessMessages;
  end;
  TheStrings.Free;
  TheStream.Free;
end;


Der Sinn ist eigentlich, dass ein String wie "PARAM1 PARAM2 PARAM3" in die einzelnen Parameter unterteil wird. Dazu ersetze ich die Leertasten durch Zeilenumbrüche, Streame das da rum und müsste so am Ende die einzelnen Strings in meiner Stringliste haben. Warum habe ich das nicht? :D

Danke,
David


BenBE - Mo 03.04.06 22:55

LoadFromStream liest ab der Stelle im Stream, wo der Datenzeiger steht ... Und am Ende steht halt nix mehr ;-)

Setzte zwischen Speichern und erneutem Laden ein Stream.Position := 0; und es sollte gehen ;-)


Narses - Mo 03.04.06 22:59

Moin!


user profile iconNetZwerg hat folgendes geschrieben:
Der Sinn ist eigentlich, dass ein String wie "PARAM1 PARAM2 PARAM3" in die einzelnen Parameter unterteil wird. Dazu ersetze ich die Leertasten durch Zeilenumbrüche, Streame das da rum und müsste so am Ende die einzelnen Strings in meiner Stringliste haben.

Ähm, schonmal mit .DelimitedText oder .CommaText bzw. .Text der TStringList vertraut gemacht? ;) Irgendwie hat das was von Wasserstoffbomben und Spatzen... :gruebel:

cu
Narses


NetZwerg - Mo 03.04.06 23:00

Hee... danke :roll: