Ты же просто сначала читаешь данные из файла, а потом поверх него записывашь новый, поврежденние данных возможно только когда идет процесс записи...
А если ты хочешь сделать все в один проход то тебе прийдется, как минимум, заблокировать файл, и потом обрабатывать данные... и получится что файл у тебя будет недоступен какое-то время, что само по себе может ривести к тормозам, но с другой стороны, если ты будешь блокировать файл сразу как только прочитал, и разблокировать только после его обновления, ты снизишь до минимума потерю данных...