我使用一款名为 WinLESS 的应用程序将 .less 文件编译为 .css。多年来,它多次警告我设置已损坏并拒绝启动。通常我只是删除配置文件并重新设置所有内容。最近一次发生这种情况时,我对此感到非常恼火,因此决定查看文件;
这是一个 XML 文件,通常长度约为 44kb,这个也不例外 - 大小相同。它有一些人们可能期望在 xml 文件中发现的常规字节;<?xml ...
但文件尾部的大部分(99% 以上)只是一长段 0x00 字节。我想有一天我会用 filesystemwatcher 做点什么,在文件发生变化时保存文件的备份,这样我就可以自动恢复它,并将其归因于 winless 在退出时保存设置时出错的一个错误
刚才我在使用 SourceTree 时遇到了同样的问题 - 同样是一个将设置保存在 XML 文件中的应用程序。我打开它查看了一下,出现了同样的问题 - 一个 12kb 的文件,但 XML 数据在几百字节后停止,文件的其余部分是 0x00
这让我很困惑,想问一个问题;今天唯一重要的事件是,当我出去的时候,SourceTree 正在运行,我忘了让笔记本电脑进入睡眠状态,结果电池没电了(而且它不会自行进入休眠状态 - 它只是突然关机),然后游戏就结束了
数据损坏是否由突然断电引起,并且是与 Windows/Disk/IO/Cache 子系统相关的问题,或者考虑到这两个应用程序都使用 XML 文件,是否表明 XML/文件写入策略中某些 XML 组件预先分配了文件所需的所有字节但从未完成写入?
我想我的问题本质上是“为什么文件可能大小正确但充满了尾随的零字节,而不是在写入停止时停止(文件末尾)?”
答案1
您应该运行 chkdsk 并查看系统事件日志中的 NTFS 错误。
文件系统将在崩溃后正常挂载和使用。如果在崩溃后写入大量数据,可能会严重损坏卷表。
在崩溃后的第二次启动期间,Windows 将不会挂载该卷,然后修复所有内容,但这可能已经太晚了,最终您会得到混合的文件内容。
零值也可能发生,尽管我曾见过 NTFS 损坏,其中混合了来自其他文件的文件内容,其中 xml 文件确实从 Windows Defender 模式文件中获取了中间二进制数据。偏移量是一个非常好的模式,如果它是 4K 的倍数,那么它可能是 NTFS 损坏,或者应用程序确实只使用了 4 KB 缓冲区,例如对于 StreamWriter 也是如此。