переместить указатель записи std::ofstream в другое место в файле

#c #file-io

Вопрос:

при записи в текстовый файл с помощью std::ofstream::operator<< I можно записывать либо с начала, либо с конца файла, но невозможно записать с середины.

У меня есть этот текстовый файл.

 ##scores##
player1: 50
player2: 10
player3: 80
 

теперь игрок 2 получает только 40 очков. и я хочу, чтобы можно было записать это, не касаясь результатов других игроков. Я мог бы скопировать весь текст, а затем изменить его в своем приложении, но это кажется немного сложным и медленным. Я задавался вопросом, есть ли какие-либо лучшие способы? вроде как:

 std::ofstream::setpos(50);
 

Комментарии:

1. seekp ?

2. Если вы имеете дело с достаточным количеством записей, которые генерируют весь файл сразу из данных в памяти, которых нет в карточках, то вам, вероятно, следует использовать фактический формат файла базы данных / библиотеку, такую как sqlite3.

3. Запись поверх форматированного текста в файле может быть действительно сложной. Часто на целые порядки проще прочитать файл, обновить его в памяти, а затем записать поверх исходного файла. Если вам нужно вставить редактирование, вы должны убедиться, что любая новая информация, которую вы записываете, имеет точно такую же длину, как и то, что она перезаписывает. Если он слишком длинный, вы пишете поверх следующей строки в файле. Если он слишком короткий, вы оставляете мусор в строке. Вы можете перемещать содержимое, если вам нужно, но знайте, что намного, намного проще сделать файл длиннее, чем сделать файл короче.