当您保存文本文件、更改内容、再次保存并按下硬件重启按钮时,文件很有可能损坏(!)(所有内容都变为 \0 个字符)。我可以在使用 Windows 7、8.1 和 10 的不同机器上重现此问题,即使我等待几秒钟、关闭文件甚至关闭应用程序。我尝试使用记事本、Notepad++、Paint、资源管理器中的文件复制和一个简单的 UWP 文件读/写应用程序。当我第一次看到这种行为时,我感到很困惑,不明白为什么在 2017 年你仍然不能依赖在突然断电后保存文件。
- 您是否认为突然断电会导致文件损坏?
- 何时以及如何知道文件是否“真实”地保存在硬盘驱动器上?
- 为什么文件仍然会这样损坏以及哪些安全网应该可以防止这种情况发生?
- 如果涉及安全网,那么在什么情况下它们会失效?
我认为使用 file_write() 操作时文件实际上并未写入指定位置,因为其中涉及一些缓存和日志记录,最终由操作系统和/或磁盘控制器决定何时完成。但我认为日志记录就是为了防止这种情况而发明的。实际文件写入应该在调用 file_flush() 或 file_close() 操作时发生。
更新:Windows -> 设备管理器 -> 磁盘驱动器 -> MyDiskDrive -> 属性 -> 策略 -> [x] 在设备上启用写入缓存中有一个选项
通过在设备上启用写入缓存来提高系统性能,但断电或设备故障可能会导致数据丢失或损坏
这与上面描述的行为完全相符,但即使我禁用写入缓存,进行干净重启并再次测试,文件仍然会损坏。WTF?
答案1
微软工程师 Raymond Chen 就您所询问的复选框撰写了两篇文章:
但是,缓存有好几层,其中一些不受操作系统的控制,因此如果不发出关机命令,就不可能确定给定的文件是否已被写入。
如果你担心数据完整性,可以购买 UPS。这样可以解决断电问题。