【发布时间】:2010-12-21 04:36:34
【问题描述】:
假设您有一个用于处理某种 XML 文件或配置文件的库。该库将整个文件读入内存并提供编辑内容的方法。处理完内容后,您可以调用write 将内容保存回文件。问题是如何以安全的方式做到这一点。
覆盖现有文件(开始写入原始文件)显然是不安全的。如果write 方法在它完成之前失败,你最终会得到一个半写的文件并且你已经丢失了数据。
更好的选择是在某处写入临时文件,当write 方法完成后,您将临时文件复制到原始文件。
现在,如果复制失败,您仍然可以在临时文件中正确保存数据。如果复制成功,您可以删除临时文件。
在 POSIX 系统上,我猜你可以使用 rename 系统调用,这是一个原子操作。但是您如何在 Windows 系统上做到最好呢?特别是,您如何使用 Python 最好地处理这个问题?
另外,还有其他安全写入文件的方案吗?
【问题讨论】: