Хотя есть несколько способов сделать это на месте, вы работаете с текстовым файлом и хотите выполнить вставки. Операционные системы обычно не поддерживают вставки текстовых файлов в качестве примитива файловой системы, и нет никаких причин, по которым они должны это делать.
лучший способ сделать это - открыть файл для чтения, открыть новый файл для записи, скопировать часть файла до точки вставки, вставить данные, скопировать Отдых, а затем переместите новый файл поверх старого.
Это обычная техника, и у нее есть цель. Если что-то пойдет не так (например, с вашей системой), у вас все еще будет оригинальный файл, и вы сможете повторить транзакцию позже. Если вы запустите два экземпляра процесса и будете использовать определенный шаблон, второй экземпляр сможет обнаружить, что транзакция уже запущена. С эксклюзивным доступом к файлам он даже может определить, была ли транзакция прервана или все еще выполняется.
Этот способ намного менее подвержен ошибкам, чем любой из методов, выполняемых непосредственно над исходным файлом, и используется всеми этими традиционными инструментами, такими как sed
, даже если вы просите их работать на месте (sed -i
). Еще одним бонусом является то, что вы всегда можете переименовать исходный файл в файл с резервным суффиксом, прежде чем перезаписывать его (sed
также предлагает такую возможность).
Этот же метод часто используется для файлов конфигурации, даже если ваша программа пишет совершенно новую версию и не использует для этого исходный файл. Прошло совсем немного времени с тех пор, как многие интернет-журналы утверждали, что ext4 случайно усекает файлы конфигурации до нулевой длины. Это было именно потому, что некоторые приложения сохраняли файлы конфигурации открытыми и усеченными, пока система была принудительно закрыта. Эти приложения часто вмешивались в исходные файлы конфигурации до , у них были готовые данные, а затем даже оставляли их открытыми без их синхронизации, что значительно увеличивало окно для повреждения данных.
TL; версия DR:
Когда вы цените свои данные, не уничтожайте их, пока у вас не будут готовы данные для замены.