I would suggest breaking the file into blocks. All blocks have the same length when they are loaded, but the length of each block can change if the user edits these blocks. This avoids moving 100 megabytes of data if the user inserts one byte in front.
, , - - . , . , .
: 100 MiB
: 16 kiB
: 6400
( ): 13
( ): 16384 6400
( ): 8192 3200
16 kiB - - , , , . .
, , , , . , , , ( ).
, . StringBuilder . , , , - . , .