Sven Rautenberg: fopen, erst lesen und danach schreiben

Beitrag lesen

Moin!

Das klappt auch, allerdings bleiben hinter dem neuen String Reste des vorherigen Strings stehen, sofern dieser laenger war. Hat jemand einen Tipp fuer mich, wie ich es elegant loesen kann, dass die ganze Zeile ueberschrieben wird?

Dateien funktionieren anders!

Angenommen, du hast eine Datei mit zwei Zeilen Text darin. Die erste Zeile enthält 10 Zeichen plus \n (insgesamt also 11), und die zweite Zeile enthält 5 Zeichen plus \n (insgesamt also 6). Die Datei ist damit 11 + 6 = 17 Byte groß.

Veranschaulichung:
0123456789\n24680\n

Szenario 1: Du schreibst in Zeile 1 einen kürzeren Zeilentext von 8 Zeichen hinein ("xxxxxxxx"). Das hat zur Folge, dass die Bytes an Position 9, 10 und 11 unverändert bleiben.

xxxxxxxx90\n24680\n

Szenario 2: Du fügst an das Ende der X noch eine Zeilenschaltung ein - dadurch erhälst du DREI Zeilen:
xxxxxxxx\n0\n24680\n

Szenario 3: Du schreibst 12 X in die Originaldatei - damit löschst du Teile der zweiten Zeile.

XXXXXXXXXXXX\n680\n

Wenn du wirklich überflüssigen Text der Datei löschen willst oder neuen Text in der Mitte einfügen, mußt du die gesamte Datei neu schreiben, und logischerweise die Datei vorher auch komplett einlesen. Lediglich wenn du eine Dateistruktur hast, die mit garantiert festen Zeilenlängen operiert (z.B. 80 Zeichen plus \n), kannst du selektiv an ganz bestimmten Stellen schreiben - mußt dir aber trotzdem ein "hier steht nichts"-Zeichen überlegen für Zeilen, die (zumindest optisch) kürzer sind, als 80 Zeichen. Und Zeilen, die länger sind, müssen zwangsweise an der 80. Position in die nächste Zeile fließen - was unter umständen heftige Verschiebeoperationen zur Folge haben kann.

- Sven Rautenberg

--
My sssignature, my preciousssss!