[英]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)秒已經過去。 這不是一個非常令人滿意的情況,但確實如此。
以下是我在實際嵌入式項目中使用的一些指針...
<checksum.../>
標記)。 然后在閱讀時,如果校驗和標簽不存在,或者與數據不匹配,那么您必須拒絕該文件為損壞。還
最后的想法:如果您真的使用嵌入式系統,在 windows 下,您最好了解更多關於 Windows Embedded 和增強型寫入過濾器系統的信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.