100MB не так уж и много на современных компьютерах. Если это одноразовая сделка, и вы не работаете на действительно медленном устройстве, вы можете просто прочитать весь файл, разделить его на строки, сделать свое редактирование и записать все это в одно мгновение.
Если это будет происходить чаще, вы можете просто добавить некоторые пробелы в первую строку (если возможно), чтобы создать «буфер» для вещей, которые вы можете поместить там в следующий раз. Затем вы можете использовать fwrite для перезаписи только этой первой строки, не касаясь остальной части файла.
Могут существовать конкретные способы использования ОС и файловой системы для размещения дополнительного пространства внутри существующего файла без перемещения данных. Например, на Linux с XFS/ext4 вы можете использовать fallocate
:
int fallocate(int fd, int mode, off_t offset, off_t len);
fallocate() позволяет вызывающего напрямую управлять выделенным дисковым пространством для файла, указанного Ф.Д. для диапазона байт, начиная со смещением и продолжение для len-байтов.
Если новая линия и старая линия имеют тот же размер, вы можете это сделать. Если нет, это невозможно. –
Btw., Эта проблема не связана с C++. Java или любой другой язык вам не помогут. – deviantfan
Если новая строка короче старой строки, она может быть дополнена пробелами. –