Mit BufRead/BufWrite kann man das allemal lösen, muss halt in einem Objekt gekapselt werden. Dann braucht man nur noch zwei kleine Caches, einen in der Lese- und einen in Schreib-Routine. BufRead ermöglicht genau festzustellen wo man gerade ist, und man kann auf die nächste Position nach CR setzen. Praktisch also ein Textfile-Scanner.
Wenn Änderungen nach BufRead nicht mehr kommen, kopiert man einfach Blockweise ab der aktuellen Position von "Infile" an die aktuelle Position von "Outfile". Das geht rasend schnell und entspricht ohnehin dem, was bei Streams im Hintergrund abläuft. Beide Files müssen dabei natürlich gleichzeitig offen sein sonst gibt das dauernde Öffnen und Schließen eine Menge Overhead mit entsprechendem Zeitbedarf.
Wer's noch schicker will organisiert die Strings als Lines im Speicher mit:
Code: Alles auswählen
TTextLines = class(TObject)
InPosition: cardinal;
OutPositon: cardinal; // negative pos nicht möglich
LineLen : integer;
Line : string;
end;