Delphi - An den Anfang einer Datei schreiben

Guten Abend,

wie kann ich an den Anfang einer existierenden Datei springen (1. Zeile) und dort etwas schreiben (durchaus auch mehrere Zeilen). Dabei soll der andere Text in der Datei NICHT überschrieben werden, sondern nur nach unten verschoben werden.
Wie kann ich das anstellen?

Bitte eine möglichst simple Erklärung.
Danke

Pascal

wie kann ich an den Anfang einer existierenden Datei springen
(1. Zeile) und dort etwas schreiben (durchaus auch mehrere
Zeilen). Dabei soll der andere Text in der Datei NICHT
überschrieben werden, sondern nur nach unten verschoben
werden.

Hallo,

indem du schreibst, was du schreiben willst, und dann die bisherige Datei drankopierst.

Das das viel ineffektiver ist als am Ende was dranzuhängen muss ich hoffentlich nicht näher erklären.

Gruss Reinhard

bisherige Datei drankopierst.

Danke, aber wie kann ich eine ganze Datei ans Ende einer Anderen kopieren?

Soetwas wie TYPE in Batch

Pascal

Danke, aber wie kann ich eine ganze Datei ans Ende einer
Anderen kopieren?

Soetwas wie TYPE in Batch

Hallo,

das musst du schon programmieren - alte Datei stückweise lesen und in neue Datei schreiben. Bei Text z.B. zeilenweise mit readln - writeln.

Gruss Reinhard

Gibt es nicht eine Funktion wie Position(0) oder Seek. Ich denke, dass ich das schon mal gehört habe.

Hallo pascal,

es gibt Seek, aber das funktioniert nicht bei Textdateien. Wenn du die Datei mit Reset öffnest steht der Cursor aber sowieso direkt am Anfang der Datei. Das Problem ist dass du vorne in der Datei nicht’s einfügen kannst. Stell dir die Datei wie ein Blatt Papier vor. Du fängst in der linken oberen Ecke an zu schreiben bis das halbe Blatt voll ist. Hier ist es dir auch nicht mehr möglich etwas an den Anfang des Blattes zu schreiben da du den Text ja nicht mehr nachträglich verschieben kannst. Du kannst nur am Ende weiteren Text schreiben.

Die Lösung ist (bei kleineren Dateien) die Datei in eine TStringList zu lesen. Hier kannst du am Anfang der TStringList Elemente (Zeilen) einfügen und die TStringList danach wieder in eine Datei speichern.

Eine Alternative die auch bei sehr großen Dateien kein Problem ist, ist folgende. Öffne die Datei an der du am Anfang etwas einfügen möchtest mit Reset. Erstelle eine zweite, temporäre Datei mittels Rewrite. Schreib in die Temporärdatei zuerst alles was du am Anfang eingefügt haben möchtest. Anschließend schreibst du Zeilenweise den Inhalt aus der Originaldatei in die temporäre Datei. Zuletzt die original Datei löschen und die temporäre Datei in den Originalnamen umbenennen.

Gruß Mike

1 Like

Hallo Mike,

vielen Dank für diese sehr ausführlich Antwort. Nun hat es genau so funktioniert wie ich es wollte, obwohl ich mit Listbox arbeite (Free Pascal, Lazarus v0.9.28.2). Hauptsache es funktioniert!

Pascal