Как и предполагалось, вы можете использовать транзакционную базу данных для отслеживания состояния. Если по разным причинам вы хотите придерживаться нормального файла:
Я бы предложил использовать файл данных на основе транзакций, который всегда добавляется, а не тот, который вы постоянно переписываете. Другими словами, при первом создании файла запишите полный набор данных в качестве исходного состояния. Затем для каждого изменения, которое записывает ваша программа, сохраните существующий файл и добавьте только изменение (например, запишите, что переменная B изменилась на 42), а не переписывайте весь файл. Когда файл достигнет определенного размера, вы закроете его, запустите новый файл с текущим полным состоянием и повторите.
Восстановление будет немного сложнее, так как вам придется восстанавливать весь файл состояния, но вы не должны сильно терять, если какие-либо данные (часто сбрасываются).