Я пытался создать функцию, которая говорила бы, что заданный номер строки заменяет эту строку другой строкой. В настоящее время я достигаю этого, считывая весь файл в свою оперативную память, изменяя строку в оперативной памяти и перезаписывая весь файл обратно. Мне было интересно, как базам данных удалось добиться этого, поскольку это довольно частая операция там.
Вам не нужно читать весь файл в память (так называемое "хлюпание"). Накатить можно так: 1) создать новый пустой файл; 2) передать содержимое из существующего файла в новый, пока не встретите строку, которую нужно заменить; 3) выписать строку замены; 4) передать остальные данные исходного файла. 5) Переименуйте новый файл поверх старого. («Конвейер» означает использование чего-то вроде io.Copy в Go. Если вы читаете/пишите построчно, просто используйте соответствующий материал из пакета bufio).
Также, если замещающая строка имеет ту же длину, что и исходная, можно "пропатчить" файл "на месте". Я надеюсь, что логика его реализации должна быть очевидной.

линия подразумевает текстовый файл, и, поскольку они обычно имеют разную длину строки, нет возможности заменить строку в файле на диске, если только новая не имеет такой же длины (операционная система не предоставляет возможности открывать или закрывать промежутки). в файле).
Базы данных, с другой стороны, обычно работают с сущностями фиксированного размера (на таблицу), поэтому там база данных может заменить содержимое «записи» новыми данными, а также сохранить список ранее использованных записей, которые теперь удалены и могут быть переработаны при вставке новых данных.
Мне жаль, что я не следую разъяснениям, которые вы предоставили в части базы данных. Не могли бы вы немного уточнить это?
@ paiakshay998 paiakshay998, если вы имеете дело с записями фиксированной длины, например, в базе данных, это, безусловно, возможно, поскольку вы можете просто вычислить смещение записи, которую нужно обновить. Проблема с обычным текстовым файлом заключается в том, что вы не знаете смещение начала определенной строки.
Многие базы данных поддерживают эту функцию и без записей фиксированной длины, но в таком случае они также записывают совершенно новые записи, подобно созданию нового файла на диске (в основном то, что уже делает OP).
Может индексировать номера строк в файловых позициях (смещениях). Затем, если вы хотите изменить строку, посмотрите ее положение в файле и найдите файл там. Замените строку, используя write или writeat, следя за тем, чтобы она не перезаписывала данные следующей строки. В противном случае вам придется настроить и написать последующие разделы и переиндексировать эти части. Можно разделить один файл на более мелкие сегменты, чтобы свести к минимуму работу по модификации