AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Dateien / Laufwerke Delphi Strings in einen Stream lesen/schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

Strings in einen Stream lesen/schreiben

Ein Thema von Matze · begonnen am 15. Feb 2007 · letzter Beitrag vom 15. Feb 2007
Antwort Antwort
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Strings in einen Stream lesen/schreiben

  Alt 15. Feb 2007, 08:18
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 diesem Beitrag.

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.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Strings in einen Stream lesen/schreiben

  Alt 15. Feb 2007, 10:43
Besitzer von BDS/TD könnten auch eine unterstützende Klasse ("class helper") einsetzen:

Delphi-Quellcode:
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;
Verwendung:

Delphi-Quellcode:
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;
Der Vorteil dieser Lösung: sie funktioniert mit allen Nachfahren von TStream.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort

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 11:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz