Il "problema" si riduce al modo in cui i file vengono scritti sul supporto di memorizzazione in modo byte per byte.
Nella sua rappresentazione di base, un file non è altro che una serie di byte scritti sul disco (ovvero un supporto di memorizzazione). Quindi la tua stringa originale assomiglia a:
Address Value
0x00 'a'
0x01 'a'
0x02 'a'
0x03 'b'
0x04 'd'
0x05 'd'
0x06 'd'
E vuoi inserire C
nella posizione 0x04. Ciò richiede lo spostamento dei byte 4 - 6 di un byte in modo da poter inserire il nuovo valore. Se non lo fai, stai per sovrascrivere il valore che è attualmente in 0x04 che non è quello che vuoi.
Address Value
0x00 'a'
0x01 'a'
0x02 'a'
0x03 'b'
0x04 'C'
0x05 'd'
0x06 'd'
0x07 'd'
Quindi il motivo per cui è necessario riscrivere la coda del file dopo aver inserito un nuovo valore è perché non c'è spazio all'interno del file per accettare il valore inserito. Altrimenti dovresti sovrascrivere quello che c'era.
Addendum 1 : se si desidera sostituire il valore di b
con C
, allora è necessario non scrivi la coda della stringa. Sostituire un valore con un valore di dimensioni simili non richiede una riscrittura.
Addendum 2 : se vuoi sostituire la stringa ab
con C
, allora vorrebbe dover riscrivere il resto del file come te ' hai creato una lacuna nel file.
Addendum 3 : costrutti a livello di blocco sono stati creati per semplificare la gestione di file di grandi dimensioni. Invece di dover trovare 1 milione di spazio contiguo per il tuo file, ora devi solo trovare 1 milione di blocchi disponibili da scrivere.
In teoria, è possibile costruire un filesystem che abbia un collegamento byte per byte simile a quello fornito dai blocchi. Quindi è possibile inserire un nuovo byte aggiornando a | dai puntatori al punto appropriato. Rischerei di indovinare che le prestazioni sarebbero piuttosto scadenti.
Come suggerito da Grandmaster B , usa un'immagine di domino sovrapposti per capire visivamente come viene rappresentato il file.
Non puoi inserire un altro domino all'interno della linea del domino senza far cadere tutto. Devi creare lo spazio per il nuovo domino spostando gli altri lungo la linea. Spostare i domino lungo la linea equivale a riscrivere la coda del file dopo il punto di inserimento.