Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TWriter/TReader und Stream (https://www.delphipraxis.net/48185-twriter-treader-und-stream.html)

jfheins 26. Jun 2005 12:51

Re: TWriter/TReader und Stream
 
Kannst du nicht einen TStringStream verwenden, darin speichern, und dann den String daraus mit deinem tollen TWriter-Objekt reinschreiben ?

Taladan 26. Jun 2005 13:42

Re: TWriter/TReader und Stream
 
Nein

Sprint 26. Jun 2005 14:23

Re: TWriter/TReader und Stream
 
Hier mal ein übertriebenes Beispiel:

Von einer String Variable in ein TMemoryStream und dann den TMemoryStream in TWriter schreiben:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Handle: Integer;
  HandleStream: THandleStream;
  MemoryStream: TMemoryStream;
  Writer: TWriter;
  S: String;
  Size: Integer;
begin

  Handle := FileCreate('M:\TEMP\TEST.TXT');
  if Handle <> -1 then
  begin
    HandleStream := THandleStream.Create(Handle);
    MemoryStream := TMemoryStream.Create;
    Writer := TWriter.Create(HandleStream, 4096);
    try
      S := 'TestString';
      MemoryStream.WriteBuffer(S[1], Length(S));
      MemoryStream.Position := 0;
      Size := MemoryStream.Size;
      Writer.WriteInteger(Size);
      Writer.Write(MemoryStream.Memory^, Size);
    finally
      Writer.Free;
      MemoryStream.Free;
      HandleStream.Free;
      FileClose(Handle);
    end;
  end;

end;
Und nun von TReader in TMemoryStream und dann in die Variable S:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  Handle: Integer;
  HandleStream: THandleStream;
  MemoryStream: TMemoryStream;
  Reader: TReader;
  Size: Integer;
  S: String;
begin

  Handle := FileOpen('M:\TEMP\TEST.TXT', fmOpenRead);
  if Handle <> -1 then
  begin
    HandleStream := THandleStream.Create(Handle);
    MemoryStream := TMemoryStream.Create;
    Reader := TReader.Create(HandleStream, 4096);
    try
      Size := Reader.ReadInteger;
      MemoryStream.Size := Size;
      MemoryStream.Position := 0;
      Reader.Read(MemoryStream.Memory^, Size);
      MemoryStream.Position := 0;
      SetLength(S, Size);
      MemoryStream.Read(S[1], Size);
      ShowMessage(S);
    finally
      Reader.Free;
      MemoryStream.Free;
      HandleStream.Free;
      FileClose(Handle);
    end;
  end;

end;

Taladan 26. Jun 2005 14:33

Re: TWriter/TReader und Stream
 
Und wo liegt nun der unterschied zwischen deinen und meinen beispiel?

Taladan 26. Jun 2005 14:43

Re: TWriter/TReader und Stream
 
das problem schein nicht an der speicherrotine zu liegen. leider

Sprint 26. Jun 2005 14:46

Re: TWriter/TReader und Stream
 
Zitat:

Zitat von Taladan
Leider funktioniert es nicht. Bekomme eine unverständlichen Laufzeitfehler...

Zitat:

Zitat von Taladan
Und wo liegt nun der unterschied zwischen deinen und meinen beispiel?

Das ich keinen unverständlichen Laufzeitfehler bekomme.

Zitat:

Zitat von Taladan
das problem schein nicht an der speicherrotine zu liegen. leider

Dann poste mal ein komplettes Beispiel wo es nicht funktioniert.

Taladan 26. Jun 2005 14:49

Re: TWriter/TReader und Stream
 
Delphi-Quellcode:
          dStrings := TStrings.Create;

          MemoryStream := TMemoryStream.Create;
          MemoryStream.Position := 0;
          size := Reader.ReadInteger;
          memorystream.SetSize(size);
          reader.Read(MemoryStream.Memory^, Size);

          MemoryStream.Position := 0;
          dstrings.LoadFromStream(MemoryStream); //hier bekomme ich den fehler. selbst wenn ich per appent dstrings etwas zuweisen will, funktioniert es nicht, abstrakter fehler

          SetObjectProp(self, PropList^[i].Name, dstrings);
PS: Was ist ein abstrakter Fehler (für mich sind alle fehler nur ein Bahnhof)

Keldorn 26. Jun 2005 14:52

Re: TWriter/TReader und Stream
 
Delphi-Quellcode:
Var dstrings:Tstrings;
...
 dStrings := TStringlist.Create;
nie tstrings.create, dort sind viele Methoden nur als abstract definiert und sind erst in Tstringlist enthalten

Taladan 26. Jun 2005 14:55

Re: TWriter/TReader und Stream
 
Dankeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee :bounce1: :corky: :party: :spin: :hi:

Aber eine abschließende Frage: Warum ein TStrings mit einen TStringList.Create?

NicoDE 26. Jun 2005 16:17

Re: TWriter/TReader und Stream
 
Zitat:

Zitat von Taladan
Warum ein TStrings mit einen TStringList.Create?

Weil TStrings nur eine abstrakte Klasse ist und TStringList TStrings implementiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 Uhr.
Seite 2 von 2     12   

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