我有一个写入更新磁盘文件的应用程序,但我想尽可能确保文件的先前版本不会损坏。
当然,更新文件最直接的方法是简单地编写:
(spit "myfile.txt" mystring)
但是,如果 PC(或 java 进程)在写入过程中死机,则文件损坏的可能性很小。
一个更好的解决方案可能是这样写:
(do (spit "tempfile" mystring)
(.rename (file "tempfile") "myfile.txt")
(delete-file "tempfile"))
这使用了 java 文件重命名功能,我认为在大多数情况下,在单个存储设备上执行该功能时通常是原子的。
对 Clojure 文件 IO 有更深入了解的任何 Clojurians 是否对这是否是最佳方法有任何建议,或者是否有更好的方法可以在更新磁盘文件时最大限度地降低文件损坏的风险?
谢谢!