Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Textdatei byteweise in MemoryStream speichern - Problem (https://www.delphipraxis.net/172326-textdatei-byteweise-memorystream-speichern-problem.html)

dynamo 26. Dez 2012 23:53

Textdatei byteweise in MemoryStream speichern - Problem
 
Hallo,
ich möchte eine Textdatei byteweise auslesen und dabei byteweise in einen Memorystream speichern.
Hier mein Beispielcode (um den kurz und übersichtlich zu halten, habe ich die Schutzblöcke mal weggelassen).

Code:
procedure makestream(datei:string);
var
   fl :file of char;
   P : char;
   len,fs : longint;
   stream : TMemoryStream;
begin
     Stream := TMemoryStream.Create;
     assignfile(fl,datei);
     reset(fl);
     fs := filesize(fl);

     Len := fs;
     Stream.Write(Len, SizeOf(Len));

     while not eof(fl) do
     begin
      read(fl,p);
//      Len := Length(p);
//      Stream.Write(len, sizeof(p));
      Stream.Write(p,sizeof(p));
     end;

   form1.Memo1.Lines.LoadFromStream(stream);
   stream.Free;
   closefile(fl);
end;
Leider bleibt mein Memofenster leer. Was mach' ich nur falsch?
Wenn diese kleine Procedure mal ordentlich läuft, möchte ich nämlich jedes einzelne Char-Zeichen bearbeiten (codieren), bevor ich es in den Stream schreibe.
Kann vielleicht jemand den Fehler korrigieren?

Bummi 27. Dez 2012 00:03

AW: Textdatei byteweise in MemoryStream speichern - Problem
 
Ich nehme an es handelt sich um "Übung" im Zusammenhang mit Streams, daher nur die korrigierte Version und keine Hinweise auf andere Optionen.

Delphi-Quellcode:
procedure makestream(datei: string);
var
  fl: file of AnsiChar;
  P: AnsiChar;
  len, fs: longint;
  stream: TMemoryStream;
begin
  stream := TMemoryStream.Create;
  try
    assignfile(fl, datei);
    reset(fl);
    fs := filesize(fl);

    len := fs;
    stream.Write(len, SizeOf(len));

    while not eof(fl) do
    begin
      read(fl, P);
      stream.Write(P, SizeOf(P));
    end;
    stream.Position := 0; // Streamposition wieder auf Anfang setzen
    stream.Read(len, SizeOf(len)); // Länge lesen, danach erst beginnt der Text
    Form1.Memo1.Lines.LoadFromStream(stream);
    closefile(fl);

  finally
    stream.Free;
  end;

end

dynamo 27. Dez 2012 00:16

AW: Textdatei byteweise in MemoryStream speichern - Problem
 
Mann - das ging ja schnell (und hat sogar geklappt!) Vielen Dank dafür.:-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:02 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