![]() |
Strings in einen Stream lesen/schreiben
Jens Schumann hat Nachfahren von TFileStream und TMemoryStream geschrieben, mit denen es möglich ist, Strings als Stream abzuspeichern bzw. auszulesen.
Veröffentlich hat er seinen Code in ![]()
Delphi-Quellcode:
uses
Sysutils, Classes; Type TMemoryStreamExt = class(TMemoryStream) public procedure WriteStringToStream(aStr: string); function ReadStringFromStream: string; end; TFileStreamExt = class(TFilestream) public procedure WriteStringToStream(aStr: string); function ReadStringFromStream: string; end; implementation { TFileStreamExt } procedure TFileStreamExt.WriteStringToStream(aStr: string); var aStrLen: Integer; begin aStrLen := Length(aStr); WriteBuffer(aStrLen, SizeOf(Integer)); WriteBuffer(Pointer(aStr)^, aStrLen); end; function TFileStreamExt.ReadStringFromStream: string; var aStrLen: Integer; begin ReadBuffer(aStrLen, SizeOf(Integer)); SetLength(Result, aStrLen); ReadBuffer(Pointer(Result)^, aStrLen); end; { TMemoryStreamExt } function TMemoryStreamExt.ReadStringFromStream: string; var aStrLen: Integer; begin ReadBuffer(aStrLen, SizeOf(Integer)); SetLength(Result, aStrLen); ReadBuffer(Pointer(Result)^, aStrLen); end; procedure TMemoryStreamExt.WriteStringToStream(aStr: string); var aStrLen: Integer; begin aStrLen := Length(aStr); WriteBuffer(aStrLen, SizeOf(Integer)); WriteBuffer(Pointer(aStr)^, aStrLen); end; end. |
Re: Strings in einen Stream lesen/schreiben
Besitzer von BDS/TD könnten auch eine unterstützende Klasse ("class helper") einsetzen:
Delphi-Quellcode:
Verwendung:
type
TStreamHelper = class helper for TStream public function ReadString: string; procedure WriteString (const s: string); end; function TStreamHelper.ReadString: string; var len : Integer; begin ReadBuffer(len, SizeOf(len)); SetLength (Result, len); if (len > 0) then ReadBuffer(Result[1], len); end; procedure TStreamHelper.WriteString (const s: string); var len : Integer; begin len := Length(s); WriteBuffer(len, SizeOf(len)); if (len > 0) then WriteBuffer(s[1], len); end;
Delphi-Quellcode:
Der Vorteil dieser Lösung: sie funktioniert mit allen Nachfahren von TStream.
procedure TForm1.Button1Click (Sender: TObject);
var Stream : TFileStream; begin Stream := TFileStream.Create('test.stm', fmCreate); Stream.WriteString ('Testtext'); Stream.Free; end; procedure TForm1.Button2Click (Sender: TObject); var Stream : TFileStream; begin Stream := TFileStream.Create('test.stm', fmOpenRead); ShowMessage (Stream.ReadString); Stream.Free; end; Gruß Hawkeye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 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