Imagine que tiene una biblioteca para trabajar con algún tipo de archivo XML o archivo de configuración. La biblioteca lee el archivo completo en la memoria y proporciona métodos para editar el contenido. Cuando termine de manipular el contenido, puede llamar al write
para guardar el contenido nuevamente en el archivo. La pregunta es cómo hacer esto de una manera segura.¿Cómo escribir de forma segura en un archivo?
Sobrescribir el archivo existente (empezando a escribir en el archivo original) obviamente no es seguro. Si el método write
falla antes de finalizar, terminas con un medio medio escrito y has perdido datos.
Una mejor opción sería la de escribir en un archivo temporal alguna parte, y cuando el método write
ha terminado, copiar el archivo temporal en el archivo original.
Ahora, si la copia falla de algún modo, aún tiene datos guardados correctamente en el archivo temporal. Y si la copia tiene éxito, puede eliminar el archivo temporal.
En sistemas POSIX supongo que puede utilizar la llamada al sistema rename
, que es una operación atómica. Pero, ¿cómo harías esto mejor en un sistema Windows? En particular, ¿cómo maneja esto mejor usando Python?
Además, ¿hay algún otro plan para escribir de forma segura en los archivos?
¿Por qué copiar? ¿Por qué no renombrar? –