2009-07-21 11 views

回答

0

我寫了一個較早的answer到一個類似的問題,在這裏也適用。步驟如下:

  1. 寫入新數據
  2. 臨時文件
  3. 移動臨時文件到原始文件的目錄中的備份文件。
  4. 執行備份和原始文件(Windows中的File.Replace或Unix中的inode交換)的原子交換。
  5. 刪除備份(現在是原始)文件。
0

使用SQLite

嗯,好吧,很是怪異使用DB的文本編輯器,但一個字處理器有這麼多國家的,它可能使一些感覺。當然,作爲多種應用程序的存儲格式是有意義的。 SQLite wiki站點上有一個page用於撤消/重做日誌。

對於文本編輯器,您可以使用數據庫執行的技術:提前寫入日誌或回滾日誌,以及與磁盤良好的同步提交。或者你可以存儲每個文件的兩個版本。

1

經驗爲保障重要數據的一個很好的規則是

嚴禁改動只複製

在Word處理器和文本編輯器的情況下,我相信這是標準打造的「陰影複製「(這可能不是技術術語),它是進行所有更改的原始文件的副本。定期(或當用戶請求時),您可以強制進行包含對原始文件進行修改的保存。這樣做的好處是,如果任何時候出現故障,總是至少有一個有效的數據副本。

真正的目標是實現原子性 - 操作只能成功或失敗,永遠不會有不完整的狀態。除了「影子副本」之外,還有許多其他方法可以實現原子性,但這是我相信文本編輯人員做到的。

0

這可能已經過時了今天的多GB的機器,但是當在mac上開發時,我記得我們曾經分配過一個足夠大的內存塊來執行保存操作。

如果我們內存不足,我們可以給用戶警告他/她內存不足,然後釋放該塊,以便實際保存操作可以發生。

對於保存用戶數據很重要的其他功能是提供撤消 - 理想情況下無限制的撤銷/重做。

相關問題