If you use Filestream, you can call
FStream.Size:=NewSize;
That manipulates file size very quickly and allows you to truncate or reserve more space to a file, however you don't have to reserve that space to write in file. You can move in a file with Position property and make precise write and read calls to wanted points that do not affect rest of the file.
Small speed trick to this:
-Never make a loop that reads/writes file (using Position or Seek) through from end to start as it is way slower than when doing from start to end. Also avoid random data...keep structure clear.