【发布时间】:2013-03-18 16:56:33
【问题描述】:
最近几次停电后,我的电脑变得很乱(不时出现蓝屏,整个操作系统的行为真的很奇怪)。
现在我有一个程序在我的电脑出现故障之前运行得非常好。这个程序基本上只是使用CreateFile 创建一个文件并使用WriteFile 写入它。这个程序还有其他的东西基于这个文件做他们的事情。我注意到整个程序的行为也很奇怪。
我的调试结果:
- 我注意到在
CreateFile之后,文件是在它所在的位置创建的 应该是(使用资源管理器和命令行检查)。 -
WriteFile没有写入文件(再次使用资源管理器和命令行检查)。 -
WriteFile之后,每当我在资源管理器中双击该文件或对该文件执行任何操作时,一切都表现为该文件不存在。 - 所有 API 都返回了各自的成功代码。绝对没有错误。
-
在我停止我的程序并退出 IDE 后,我进入资源管理器并尝试删除包含上面创建的文件的文件夹,它显示了这个:
文件已被删除。
注意:上述情况并不总是发生。
由于上述调试,我得出的结论是,由于我的整个操作系统表现异常,我的程序也表现异常。我的程序没有错误(因为在那些该死的停电之前一切正常)。
不管怎样,微软有this to say about that error。基本上我的硬盘有很多坏扇区。
我的问题:有没有办法以编程方式检查硬盘在 C 语言中是否正常?这种检测不需要是 100% 正确的。但是,我确实希望此检查非常快(因为我做了很多写操作等)。
我想要这个检查,因为到目前为止,我的程序的其余部分认为文件在那里并且准备好了(因为没有返回错误)并且随之而来的是各种奇怪的行为。作为一个可能不知道他/她的硬盘被分区的用户,我希望我的程序建议运行磁盘检查。
【问题讨论】:
-
@NPE, “有没有办法以编程方式检查硬盘驱动器在 C 语言中是否正常?”
-
除非您的程序是某种应该知道此类问题的实用程序,否则建议用户检查磁盘是否有错误会很奇怪
-
@msam,该消息只是一种可能性。但我绝对不希望我的程序在发现这种情况时继续运行。
-
尝试使用
FILE_FLAG_NO_BUFFERING标志打开文件,以便写入立即刷新到磁盘并且不通过磁盘缓存...所以您可能会在返回中看到一些错误WriteFile的代码。但是,这也会降低性能。
标签: c winapi hard-drive corruption