Представьте, что у вас есть библиотека для работы с каким-либо файлом XML или конфигурационным файлом. Библиотека читает весь файл в памяти и предоставляет методы для редактирования содержимого. Когда вы закончите манипулирование контентом, вы можете позвонить write
, чтобы сохранить содержимое обратно в файл. Вопрос в том, как сделать это безопасным способом.Как безопасно писать в файл?
Перезапись существующего файла (начиная с записи в исходный файл), очевидно, небезопасна. Если метод write
завершился с ошибкой до его завершения, вы получите половину записанного файла, и вы потеряли данные.
Лучшим вариантом было бы записать в файл временного где-то, и когда метод write
закончил, вы скопировать временный файл в исходный файл.
Теперь, если копия как-то не удалась, вы все равно правильно сохранили данные во временном файле. И если копия завершается успешно, вы можете удалить временный файл.
В системах POSIX, я думаю, вы можете использовать системный вызов rename
, который является атомной операцией. Но как бы вы сделали это лучше всего в системе Windows? В частности, как вы справляетесь с этим, используя Python?
Кроме того, существует ли другая схема безопасного хранения файлов?
Зачем копировать? Почему бы не переименовать? –