Я разрабатываю настольное приложение на основе документов, которое записывает довольно большой и сложный файл на диск, когда пользователь сохраняет свой документ. Какова наилучшая практика для предотвращения повреждения данных? Есть несколько вещей, которые могут произойти:
Процесс сохранения может завершиться неудачей на полпути, что, конечно, является серьезной ошибкой приложения, но в этом случае лучше оставить старый файл, чем поврежденный наполовину записанный файл. Та же проблема возникнет, если приложение будет по какой-то другой причине завершено в середине записи файла.
Самый надежный подход, который я могу придумать, - это использовать временный файл при сохранении и заменять исходный файл только после успешного создания нового файла. Но я обнаружил, что есть несколько операций (создание временного файла, сохранение в временном файле, удаление оригинала, перемещение временного файла в исходный), которые могут или не могут завершиться неудачей, и в итоге я получаю довольно сложную путаницу операторов try / catch для их правильной обработки.
Существует ли передовая практика / стандарт для этого сценария? Например, лучше ли скопировать оригинал во временный файл и затем перезаписать оригинал, чем сохранить во временный файл?
Кроме того, как можно объяснить состояние файла в приложении на основе документов (в Windows)? Лучше оставить файл открытым для записи приложением до тех пор, пока пользователь не закроет документ, или просто быстро открыть прочитанный файл и быстро закрыть его снова? Плюсы и минусы?