AGB  ·  Datenschutz  ·  Impressum  







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

TFileStream Problem

Ein Thema von kurtm1 · begonnen am 10. Jul 2005 · letzter Beitrag vom 10. Jul 2005
 
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2

Re: TFileStream Problem

  Alt 10. Jul 2005, 11:32
Hallo,
es handelt sich eigentlich nicht um einen Fehler. Die Huge-Strings sind hier Schuld.
Delphi-Quellcode:
var
  ini : String;
...
  SizeOf(ini); // liefert als Ergebnis 4.
..
in der Variablen ini ist nur eine Referenz (Zeiger) auf den String gespeichert.
Deshalb musst beim Schreiben und Lesen von Strings in einen Stream wie folgt vorgehen.
D.h. ich habe mir mal zwei Streamnachfahren gebastelt
Delphi-Quellcode:
interface

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); // Länge des Strings holen
  WriteBuffer(aStrLen,SizeOf(Integer)); // Länge des Strings in den Stream schreiben
  WriteBuffer(Pointer(aStr)^,aStrLen); // Den eigentlichen String in den Stream schieben
end;

function TFileStreamExt.ReadStringFromStream: String;
var
   aStrLen : Integer;
begin
  ReadBuffer(aStrLen,SizeOf(Integer)); // Länge des Strings aus Stream lesen
  SetLength(Result,aStrLen); // Länge des Strinsg setzen
  ReadBuffer(Pointer(Result)^,aStrLen); // Stringdaten aus Stream lesen
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.
I come from outer space to save the human race
  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 13:41 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