強制關閉電腦導致二進位檔案中的資料損壞

強制關閉電腦導致二進位檔案中的資料損壞

我使用 C++ 將一些資料保存在二進位檔案中。資料保存兩分鐘後,電腦突然斷電。當我重新啟動電腦時,資料已損壞。當我讀取二進位檔案時,所有值都是0,這當然不是我寫入檔案的值。

電腦突然斷電是否有可能損壞了我檔案中的資料?還是說這種情況不可能發生,因為即使在突然斷電的情況下,一旦寫入並保存到磁碟的資料也不會損壞。如果是後者,那麼我將不得不開始對這個問題進行詳細調查,但我真的不懷疑還有其他問題。該程式非常簡單,已經使用了兩年,這是我第一次看到使用該程式寫入的檔案出現資料損壞。

PS檔確實儲存完成了。儲存檔案的程式正確管理檔案 I/O - 它在完成寫入後關閉檔案。此外,斷電時程序甚至沒有運作。這發生在 Windows 8.1 上。

答案1

簡單來說,當您建立資料檔案時,作業系統必須執行以下三件事:

  1. 分配包含資料所需的區塊。
  2. 將零寫入這些區塊中,否則如果您嘗試讀取它們,則會導致顯示零。
  3. 將資料寫入分配的區塊。

由於系統安全性,步驟 2 是必要的。分配的區塊之前可能包含其他人的數據,如果允許您讀取他們的舊數據,這將構成系統的安全漏洞。所以你會得到零。如果在步驟 2 和步驟 3 之間斷電,您將看到零而不是資料。

根據底層作業系統和檔案系統,除非您在程式中明確地將資料同步到磁碟,否則步驟 3 可能會在步驟 2 之後發生任意長時間。

在 POSIX 相容系統上,調用fsync()以確保您的資料已達到永久儲存。

相關內容