Entwickler-Ecke

Dateizugriff - TMemoryStream und Strings!?


Sivar - Di 28.01.03 13:41
Titel: TMemoryStream und Strings!?
Hallo,

ich verwende ein TMemoryStream um ihn später über die NMStrm (FastNet) Komponente zu verschicken.

Bilder und Dateien kann ich ganz auch ohne Probleme in den Stream Laden, da die Objekte die Methoden SaveToStream und LoadFromStream mitbringen.

Mein Stream ist dabei so aufgebaut das zunächst ein Header in den Stream geschriben wird, der beinhaltet was im Stream gespeichert ist (Typ und Länge).

Nun möchte ich auch Strings über den Stream verschicken ohne dafür extra TStringStream nutzen zu müssen.

Jetzt zur Frage:
Wie kann ich einen String mit TMemoryStream.WriteBuffer in den Stream schreiben und Ihn später wieder rausholen?


Udontknow - Di 28.01.03 15:52

Hi!

Hier sind zwei nützliche Prozeduren:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure SaveStrToStream(const Stream: TStream; const Value: String);
//Schreibt einen dynamischen String in einen Stream
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);
//Liest einen dynamischen String aus einem Stream
var Len: Word;
begin
  Stream.ReadBuffer(Len, SizeOf(Len));
  SetLength(Str, Len);
  if Len > 0 then
    Stream.ReadBuffer(Pointer(Str)^, Len);
end;


Cu, :D
Udontknow


Sivar - Di 28.01.03 16:42

Super, genau auf die Art hab ich's noch nicht probiert.
Werde ich machen sobald ich heute zu Hause bin und mein Frauchen mir erlaubt an meinen PC zu gehen :)

Vielen Dank!!