检查硬盘上的坏扇区

最近几次停电后,我的计算机已经搞得很乱(BSODs时不时,整个操作系统表现得非常奇怪)。

现在我有一个程序在我的计算机搞砸之前运行得非常好。 该程序基本上使用CreateFile创建一个文件,并使用WriteFile写入它。 这个程序还有其他东西基于这个文件做他们的事情。 我注意到整个程序也表现得很奇怪。

我的调试结果:

  • 我注意到在CreateFile之后,创建了应该存在的文件(使用资源管理器和命令行进行检查)。
  • WriteFile没有写入文件(再次使用资源管理器和命令行进行检查)。
  • WriteFile之后,每当我在资源管理器中双击文件或对该文件做任何事情时,一切都表现得好像文件不存在。
  • 所有API都返回了各自的成功代码。 绝对没有错误。
  • 我停止了我的程序并退出了IDE之后,我去了explorer并试图删除包含上面创建的文件的文件夹,它向我展示了这个:

    我尝试删除文件夹时出错

  • 该文件已被删除。

注意:上述情况并非总是如此。

由于上面的调试,我得出的结论是,由于我的整个操作系统表现得很奇怪,我的程序也很奇怪。 我的计划没有错(因为在那些严重的停电之前一切都很完美)。

无论如何,微软有这个说错误 。 基本上我的硬盘有很多坏道。

我的问题:有没有办法以编程方式检查C中的硬盘驱动器是否正常? 该检测不需要100%正确。 但是,我确实希望这个检查非常快(因为我做了很多写等等)。

我想要这个检查,因为到目前为止,我的程序的其余部分认为文件已经准备就绪(因为没有返回错误)并且随后发生了各种奇怪的行为。 作为一个可能不知道他/她的硬盘被驱动的用户,我希望我的程序建议运行磁盘检查。

您可能最好通过一个API来查看SMART故障前通知,该API允许在驱动器问题发生之前对其进行早期预警。 这是我很快找到的一个实现,它似乎适用于您的平台,但我还没有测试过。

我怀疑有更好的可用。 这种SMART方法的主要优点是在问题变得重要之前发现问题。 但是,许多操作系统都内置了此function,在磁盘实用程序以外的应用程序级别执行此操作很少见。

由于您的应用程序是在操作系统之上构建的,因此您必须依赖其错误报告并将其传递出去。 您不能假设特定错误意味着它需要磁盘检查。

在您的情况下,我建议运行完整的磁盘检查并继续正常运行。