AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TWriter/TReader und Stream

Ein Thema von Taladan · begonnen am 21. Jun 2005 · letzter Beitrag vom 26. Jun 2005
 
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: TWriter/TReader und Stream

  Alt 25. Jun 2005, 23:35
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
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz