Also, selbst wenn bei TextFile ein Fehler auftreten sollte dann ist wäre das Speicherleck jedenfalls geringer, als wenn was bei der StringList passiert (nach den obrigen Codes)
Aber man kann ja auch nochmehr an Code einsparren und die ganzen I/O-Checks weglassen
Delphi-Quellcode:
Var F: TextFile;
Count: Integer;
Count := 0;
AssignFile(F, ...);
FileMode := fmOpenRead;
{$I-}
Reset(F);
While not EoF(F) do Begin
ReadLn(F);
Inc(Count);
End;
CloseFile(F);
{$I+}
If IOResult <> 0 Then Count := -1;
// Count >= 0 Count = Zeilenanzahl
// Count = -1 Fehler
Aber hast du dir mal angesehn, was TStringList.LoadFromFile macht?
Das erstellt erstmal 'nen FileStream
kopiert den Inhalt der Datei in einen String
zerlegt den großen String in kleine Strings
und fügt diese kleinen Strings in die StringListe ein ... und zwar jeden einzeln (was intern auch wieder einiges an rumcopieren verursacht)
und gibt zum schluß wieder die beiden Strings und den FileStream frei (man hat also zeitweise über das Doppelte der Dateigröße im
RAM und wenn die Datei aus nur einem String besteht sogar as Dreifache
...
tja und zum Schluß muß auch alles wieder freigegeben werden