簡體   English   中英

文件關閉問題 windows

[英]File close issue windows

我們正在使用 File.WriteAllBytes 將數據寫入磁盤。 但是,如果在我們關閉文件時重新啟動,windows 會將 null 添加到文件中。 這似乎發生在 Windows 7 上。因此,一旦我們回到文件,我們會在文件中看到空值。 有沒有辦法防止這種情況。 windows 是否在一定時間后關閉其內部手柄,是否可以立即強制關閉?

取決於你想要什么行為; 您可以按照 0A0D 的建議將其放入 UPS; 但除此之外,您還可以使用 Windows 的 Vista+ Transactional NTFS功能。 這允許您以原子方式寫入文件系統。 所以在你的情況下; 什么都不會寫,而不是不正確的數據。 它還不是 .NET 框架的直接一部分; 但是網上有很多托管包裝器。

有時沒有數據比錯誤的數據好。 當您的應用程序再次啟動時; 可以看到文件丟失了; 它可以從中斷的地方“繼續”; 取決於你的應用程序做什么。

根據您的評論,寫入文件時無法保證 - 特別是如果您在文件寫入期間斷電。 最好的辦法是將 PC 置於不間斷電源上。 如果您能夠創建自動恢復機制,例如 Microsoft Office 產品,那么這將防止數據完全丟失,但不會在斷電時修復丟失的數據。

我認為這是一個致命的例外情況(突然斷電)。 您對此無能為力,通常,試圖處理它們只會讓事情變得更糟。

我不得不處理類似的事情; 本質上是一個在 Windows 上運行的嵌入式系統,預期電源可能隨時關閉。

在實踐中,我的理解是,在斷電前不到 10 秒寫入磁盤的文件意味着該文件將被損壞。 (我在我的代碼中使用 30 秒來保證安全)。

我不知道有任何方法可以從代碼中保證文件已完全關閉,刷新到磁盤,並且磁盤硬件已完成寫入。 除非知道 10(或 30)秒已經過去。 這不是一個非常令人滿意的情況,但確實如此。

以下是我在實際嵌入式項目中使用的一些指針...

  • 使用校驗和和備份文件系統。
  • 校驗和:在您編寫的任何文件的末尾,包含校驗和(如果它是自定義 XML 文件,則可能包含某種<checksum.../>標記)。 然后在閱讀時,如果校驗和標簽不存在,或者與數據不匹配,那么您必須拒絕該文件為損壞。
  • 備份:每次寫入文件時,將副本保存到兩個備份之一; 說 A 和 B。如果 A 存在於磁盤上但不到 30 秒,則改為復制到 B。 然后在閱讀時,首先閱讀原始文件。 如果損壞,則讀取 A,如果損壞,則讀取 B。

  • 如果它是嵌入式系統,則需要在啟動時在寫入的驅動器上運行 DOS 命令“chkdsk /F”。 因為如果你得到損壞的文件,那么你也將得到一個損壞的文件系統。
  • NTFS 磁盤系統旨在比 FAT32 更強大地抵抗錯誤。 但我相信 NTFS 磁盤也可能需要更多時間來完全刷新數據。 我盡可能使用 FAT32。

最后的想法:如果您真的使用嵌入式系統,在 windows 下,您最好了解更多關於 Windows Embedded 和增強型寫入過濾器系統的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM