Hi, hatte mal dasselbe Problem. Man könnte eine Klasse von TReader/TWriter ableiten. Problem: auf das private-Element TFiler.FStream kann nur innerhalb des Moduls zugegriffen werden, in dem die Klasse deklariert ist.
Da ich nicht in Classes.pas rumpfuschen wollte musste ich eine TReader/TWriter kapselnde Klasse schreiben, die eine interne Instanz von TReader/TWriter für die "Standardoperationen" verwendet und halt zusätzlich noch eine WriteStream/LoadStream Funktion hat.
Wenn du keine Lust hast, eine extra Klasse dafür zu schreiben, kannst du natürlich auch einfach irgendwo Prozeduren deklarieren:
Delphi-Quellcode:
procedure LoadStreamFromStream(R: TReader; SourceStream, TargetStream: TStream);
var StreamSize, OldPos: Int64;
begin
StreamSize := R.ReadInt64;
OldPos := SourceStream.Position;
If StreamSize > 0 then
begin
TargetStream.CopyFrom(SourceStream, StreamSize);
SourceStream.Position := OldPos + StreamSize; {könnte man auch mit Seek() machen, hab aber gerade keinen Schimmer, ob CopyFrom() die Position des SourceStreams verändert}
end;
end;
procedure SaveStreamToStream(W: TWriter; SourceStream, TargetStream: TStream);
var OldPos: Int64;
begin
OldPos := SourceStream.Position;
W.WriteInt64(SourceStream.Size);
If SourceStream.Size > 0 then
begin
TargetStream.CopyFrom(SourceStream, SourceStream.Size);
SourceStream.Position := OldPos;
end;
end;
Code ohne Funktionsgarantie
Eventuelles Problem: wenn man versucht einen Stream zu lesen, wo gar keiner gespeichert ist, kriegt man unvorhersehbare Daten in den TargetStream geschrieben.
Dani H.
At Least I Can Say I Tried