我正在開發基於文檔的桌面應用程序,該應用程序在用戶保存文檔時將相當大且複雜的文件寫入磁盤。在這裏做什麼是防止數據損壞的最佳做法?有很多事情可能發生:覆蓋文檔文件
保存過程可能會失敗一半,這當然是一個嚴重的應用程序錯誤,但在這種情況下,寧願讓舊文件比損壞的半寫入文件。如果在文件寫入過程中由於其他原因導致應用程序終止,則會發生同樣的問題。
我能想到的最穩健的方法是在保存時使用臨時文件,並且只有在新文件成功創建後才替換原始文件。但是我發現有幾個操作(創建tempfile,保存到tempfile,刪除原始文件,將tempfile移動到原始文件),可能會也可能不會失敗,並且我最終會遇到相當複雜的try/catch語句來處理它們。
這種情況下是否有最佳做法/標準?例如,將原始文件複製到臨時文件然後覆蓋原始文件比保存到臨時文件更好?
此外,如何以文件爲基礎的應用程序(在Windows中)的文件狀態的原因?在用戶關閉文檔之前將文件保留爲打開狀態,或者快速打開文件並快速關閉它,是否更好?優點和缺點?
謝謝喬恩。假設文件可以被部分更新而不是完全重寫(例如OPC包文件),您是否同意這只是在4個項目符號之前的一個額外步驟:將file.ext複製到file.ext.new以使模板從...開始?我使用可部分更新的格式的原因之一是性能,我擔心預先複製整個舊文件可能會取消部分性能提升。需要測量我猜。 –
@Anders:是的,這是有道理的。基本上,如果你不能容忍以*部分*更新的文件結束,你真的必須先複製它... –