dedlfix: Warum wird die Zeile nicht ausgetauscht?

Beitrag lesen

Tach!

Datei auf ein Array lesen, mit dem Array operieren und das Array zurück in die Datei schreiben, fertig.
Das ist zwar jetzt ein bisschen off topic, aber man bekommt mit dieser Methode Probleme wenn die Datei größer ist als der zur Verfügung stehende Speicher.

Richtig, aber solch große Dateien bearbeitet man eher selten in Web-Requests. Man kann durchaus erstmal davon ausgehen, dass die Array-Methode ausreichend ist.

Eigentlich würde es ausreichen die Datei aufzumachen, den Dateizeiger dann zu der Zeile zu bewegen die man ändern möchte dann eine Zeile schreiben (die dann die Zeile die schon drinn ist  überschreibe) und den file handler wieder zu schließen.

Eine Textdatei ist keine Datenbank. Dein Vorschlag funktioniert nur dann, wenn der neue Text exakt die gleiche Länge hat, wie der alte. Ansonsten hast du einen Textrest stehen gelassen oder den nachfolgenden Text überschrieben.

Das müsste auch viel viel schneller gehen als alles in den Speicher zu schreiben und dann komplett wieder alles auf die Festplatte.

Ab der zu ändernden Stelle ist der Rest neu zu schreiben. Das geht innerhalb einer Datei, wenn der neue Text kleiner ist und man den nachfolgenden Text nach vorn kopieren kann. Für größeren Text braucht es zwei Puffer. Der eine enthält den einzufügenden Teil, in den zweiten kommt vorher das was im Weg steht. So hangelt man sich bis zum Ende. Alternativ eine zweite Datei schreiben, da hat man weniger logischen Aufwand. Der zeitliche Unterschied ist abhängig vom ersten unveränderten Teil.

dedlfix.