Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi datei mit TFileStream auslesen (https://www.delphipraxis.net/22689-datei-mit-tfilestream-auslesen.html)

phXql 21. Mai 2004 15:39


datei mit TFileStream auslesen
 
Moin leute, ich möchte eine textdatei mit einem TFileStream-Objekt auslesen. ich hab bisher folgenden code:

Delphi-Quellcode:
procedure LoadFile(Filename : String; window : TFormChild);
var stream : TFileStream;
    t_read : Array of Byte;
    a : Integer;
    t_str : String;
begin
  stream := TFileStream.Create(Filename,fmOpenRead);
  SetLength(t_read,stream.size);
  t_str := '';
  for a := 0 to Length(t_read) - 1 do
  begin
    stream.Read(t_read[a],1);
    t_str := t_str + chr(t_read[a]);
  end;
  FreeAndNil(stream);
  window.mmoMain.Text := t_str;
end;
möchte ich damit eine 1 MB datei öffnen, dauert es schoin etwas. ich glaube auch nicht, dass das oben die optimale methode ist. hat jemand ein tutorial oder ein kleines beispiel, wie es besser geht?

mfg
phXql

sakura 21. Mai 2004 15:43

Re: datei mit TFileStream auslesen
 
Die simpelste Anpassung in Deinem Beispiel wäre:

Code:
procedure LoadFile(Filename : String; window : TFormChild);
var stream : TFileStream;
    t_read : Array of [color=#f50000]Char[/color];
    a : Integer;
    t_str : String;
begin
  stream := TFileStream.Create(Filename,fmOpenRead);
  SetLength(t_read,stream.size);
  [color=#ff0024]stream.read(t_read[0], stream.size);[/color]
  FreeAndNil(stream);
  window.mmoMain.Text := String(PChar(@t_read[0]));
end;
oder :!:

Delphi-Quellcode:
procedure LoadFile(Filename : String; window : TFormChild);
begin
  window.mmoMain.LoadFromFile(Filename);
end;
Größere Dateien sollte man jedoch eher Blockweise einlesen.

...:cat:...

Luckie 21. Mai 2004 15:45

Re: datei mit TFileStream auslesen
 
Setz deine String Variable t_str auch mal vorher auf die benötigte länge. So hast du einen Speicherkiller gebaut und das rumkopieren im Speicher dauert auch seine Zeit.

phXql 21. Mai 2004 15:45

Re: datei mit TFileStream auslesen
 
jo blockweise wäre mir lieber, dann kann ich den fortschritt des lade-vorgangs anzeigen. ich hab das mit dem blockweise auslesen schon versucht, bin aber dran gescheitert :(

sakura 21. Mai 2004 15:49

Re: datei mit TFileStream auslesen
 
Das eigentliche Problem wird der letzte Schritt. Das Auslesen mag recht schnell gehen, aber wenn Du einen Fortschritt anzeigen willst wirst Du beim Zuweisen des Textes scheitern, da das Setzen des Textes im Memo recht lange dauert, wenn dieser groß wird. Also bleibe lieber bei LoadFromFile und das geht am schnellsten ;)

Was hat der User vom Fortschrittsbalken, wenn es dadurch dreimal so lange dauert :shock:

...:cat:...

phXql 21. Mai 2004 15:52

Re: datei mit TFileStream auslesen
 
na ja, stimmt auch wieder :).. dann werd ichs beim LoadFromFile belassen... danke :)


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