[英]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.