3

最近在几次停电之后,我的电脑变得非常混乱(不时出现蓝屏,整个操作系统的行为真的很奇怪)。

现在我有一个程序在我的电脑坏掉之前运行得非常好。该程序基本上只是使用创建一个文件CreateFile并使用WriteFile. 这个程序还有其他的东西基于这个文件做他们的事情。我注意到整个程序的行为也很奇怪。

我的调试结果:

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

    尝试删除文件夹时出错

  • 虽然文件被删除了。

注意:上述情况并非总是发生。

由于上述调试,我得出的结论是,由于我的整个操作系统表现异常,我的程序也表现异常。我的程序没有错误(因为在那些该死的停电之前一切都很完美)。

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

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

我想要这个检查,因为到目前为止,我的程序的其余部分认为文件在那里并且准备好了(因为没有返回错误)并且随之而来的是各种奇怪的行为。作为一个可能不知道他/她的硬盘被分区的用户,我希望我的程序建议运行磁盘检查。

4

2 回答 2

6

You might be better off looking at S.M.A.R.T prefailure notifications, through an API that allows early warning of drive issues before they occur. Here is one implementation I found quickly which appears to be for your platform, but I have not tested it.

I suspect there are better ones available. The main advantage of this SMART approach is finding issues before they become important. However, many operating systems have this functionality built in, it's rare to do it at the application level in something other than a disk utility.

于 2013-03-28T10:02:14.923 回答
0

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

在您的情况下,我建议运行全盘检查并照常进行。

于 2013-03-28T10:54:07.013 回答