#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. Запись поверх форматированного текста в файле может быть действительно сложной. Часто на целые порядки проще прочитать файл, обновить его в памяти, а затем записать поверх исходного файла. Если вам нужно вставить редактирование, вы должны убедиться, что любая новая информация, которую вы записываете, имеет точно такую же длину, как и то, что она перезаписывает. Если он слишком длинный, вы пишете поверх следующей строки в файле. Если он слишком короткий, вы оставляете мусор в строке. Вы можете перемещать содержимое, если вам нужно, но знайте, что намного, намного проще сделать файл длиннее, чем сделать файл короче.