检查硬盘上的坏扇区

时间:2013-03-28 09:52:49

标签: c winapi hard-drive corruption

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

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

我的调试结果:

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

    Error When I Tried Deleting the Folder

  • 该文件已被删除。

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

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

无论如何,微软有this to say about that error。基本上我的硬盘有很多坏道。

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

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

2 个答案:

答案 0 :(得分:5)

您可能最好通过一个API来查看S.M.A.R.T故障前通知,该API允许在驱动器问题发生之前对其进行预警。 Here是我发现的一个实现,它似乎适用于您的平台,但我还没有测试过。

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

答案 1 :(得分:0)

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

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