Das "Problem" besteht darin, wie Dateien byteweise auf das Speichermedium geschrieben werden.
In der einfachsten Darstellung ist eine Datei nichts anderes als eine Reihe von Bytes, die auf die Festplatte (auch als Speichermedium bezeichnet) geschrieben werden. Ihre ursprüngliche Zeichenfolge sieht also so aus:
Address Value
0x00 `a`
0x01 `a`
0x02 `a`
0x03 `b`
0x04 `d`
0x05 `d`
0x06 `d`
Und Sie möchten C
an Position 0x04 einfügen . Dazu müssen die Bytes 4 - 6 um ein Byte nach unten verschoben werden, damit Sie den neuen Wert einfügen können. Wenn Sie dies nicht tun, überschreiben Sie den Wert, der derzeit bei 0x04 liegt und nicht Ihren Wünschen entspricht.
Address Value
0x00 `a`
0x01 `a`
0x02 `a`
0x03 `b`
0x04 `C`
0x05 `d`
0x06 `d`
0x07 `d`
Der Grund, warum Sie das Ende der Datei nach dem Einfügen eines neuen Werts neu schreiben müssen, liegt darin, dass in der Datei kein Platz vorhanden ist, um den eingefügten Wert zu akzeptieren. Andernfalls würden Sie überschreiben, was dort war.
Anhang 1 : Wenn Sie den Wert von durch ersetzen möchten, müssen Sie den Schwanz der Zeichenfolge nicht neu schreiben. Das Ersetzen eines Werts durch einen Wert gleicher Größe erfordert kein Umschreiben.b
C
Anhang 2 : Wenn Sie die Zeichenfolge ab
durch ersetzen möchten, müssen C
Sie den Rest der Datei neu schreiben, da Sie eine Lücke in der Datei erstellt haben.
Nachtrag 3 : Block Level - Konstrukte wurden erstellt , um große Dateien zu erleichtern Handhabung zu behandeln. Anstatt zusammenhängenden Speicherplatz für Ihre Datei im Wert von 1 Million zu finden, müssen Sie jetzt nur noch verfügbare Blöcke im Wert von 1 Million finden, in die Sie schreiben können.
Theoretisch könnten Sie ein Dateisystem erstellen, das Byte für Byte verknüpft, ähnlich wie Blöcke. Dann können Sie ein neues Byte einfügen, indem Sie das auf | aktualisieren von Zeigern an der entsprechenden Stelle. Ich würde eine Vermutung wagen, dass die Leistung darauf ziemlich schlecht wäre.
Verwenden Sie, wie Großmeister B vorgeschlagen hat , ein Bild gestapelter Dominosteine, um visuell zu verstehen, wie die Datei dargestellt wird.
Sie können keinen weiteren Domino in die Domino-Linie einfügen, ohne dass alles umkippt. Sie müssen den Raum für das neue Domino schaffen, indem Sie die anderen entlang der Linie bewegen. Das Verschieben von Dominosteinen entlang der Linie entspricht dem erneuten Schreiben des Endes der Datei nach der Einfügemarke.