Вы не можете вставить или удалить некоторую последовательность байтов внутри файла. Вы можете только перезаписать существующих байтов или добавить новые байты в конец файла (так как файлы <stdio.h>
были стандартизированы и как ведут себя файлы POSIX или Windows, и как почти каждый file system -Я не знаю ни одного исключения сегодня - works)
Таким образом, вы можете создать новый файл из старого (тогда, возможно, rename
новый, как старый).
Вы также можете прочитать весь файл в памяти и вывести весь новый контент из памяти.
Вы, вероятно, следует рассматривать абстракций более высокого уровня: индексированные файлы а-ля GDBM или простые базы данных а-ля Sqlite (или реальных базах данных, как PostgreSQL, MongoDb, и т.д ...)
Обратите внимание, что современные процессоры намного быстрее, чем диски (почти миллион раз для hard spinning disks - с временем доступа в десятки миллисекунд - и, вероятно, тысячи раз для SSD - с временем доступа около ста микросекунд). Поэтому имеет смысл (и намного больше, чем в предыдущем столетии) тратить некоторое время процессора на «организацию» данных, записанных в «файлы» или в «сеть».
Если вы работаете с ноутбуком или настольным компьютером, у него сегодня много оперативной памяти (несколько гигабайт), поэтому вполне вероятно, что все ваши данные будут в памяти. Также пропускная способность ОЗУ намного выше, чем диск, или SSD, или пропускная способность сети (и латентность RAM также намного ниже). Если вы управляете большим количеством данных (более гигабайта) с использованием системы базы данных, это разумно (в частности, потому что вы можете не писать все сразу).
Вы могли бы быть заинтересованы в serialization, application checkpointing, JSON ....
Если файл не слишком большой, и вы не вынуждены изменять его непосредственно в файле, может быть проще прочитать весь файл в памяти, замените его и снова запишите. – jpw