![]() |
datei mit TFileStream auslesen
Moin leute, ich möchte eine textdatei mit einem TFileStream-Objekt auslesen. ich hab bisher folgenden code:
Delphi-Quellcode:
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?
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; mfg phXql |
Re: datei mit TFileStream auslesen
Die simpelste Anpassung in Deinem Beispiel wäre:
Code:
oder :!:
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;
Delphi-Quellcode:
Größere Dateien sollte man jedoch eher Blockweise einlesen.
procedure LoadFile(Filename : String; window : TFormChild);
begin window.mmoMain.LoadFromFile(Filename); end; ...:cat:... |
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.
|
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 :(
|
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:... |
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 06:43 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 by Thomas Breitkreuz