Ich glaube da ist selbst FileSize() in Verbindung mit der For-Schleife nicht optimal (außer wenn [in seinem Fall] data nur 1 Byte groß ist)
per EOF(Datei) kannst du gucken, ob das Ende erreicht wurde. Da man die Anzahl der Lesebefehle nicht kennt, verwendet man nicht die inidizerte Schleife (for i) sondern eine
"einfachere". Falls die Datei (IMMER) aus mindestens einem Datensatz besteht, so kann man dies mit der repeat until Schleife machen.
Ansonsten nimmt man die While Do Schleife
Beispielcodefetzen:
Delphi-Quellcode:
AssignFile(MeineDatei, DateiName);
{$I-}
Reset(MeineDatei);
{$I+}
if IOResult <> NO_ERROR then // Datei existiert nicht, neu anlegen // NO_ERROR = 0
ReWrite(MeineDatei);
while not EOF(MeineDatei) do
begin
Read(MeineDatei, DatenSatz);
FügeDatenSatzInZbListe(DatenSatz);
end;
Im obrigen Beispiel ist die Position vom FilePointer auf 0 (beim Öffnen einer Datei immer 0); falls die Datei jedoch offen war und Dateioperationen durchgeführt wurden, muss dies nicht der Fall sein, deshalb eignet sich ein Seek(MeineDatei, 0) eventuell.