检查硬盘上的坏道

3

最近经历几次停电后,我的电脑变得非常混乱(偶尔出现蓝屏,整个操作系统表现异常)。

现在我有一个在电脑出问题之前运行得非常完美的程序。这个程序基本上只是使用 CreateFile 创建文件,并使用 WriteFile 写入文件。此外,该程序还有其他功能根据该文件进行操作。我注意到整个程序的表现也很奇怪。

我的调试结果:

我注意到在CreateFile之后,文件被创建在了正确的位置(使用资源管理器和命令行进行了检查)。 WriteFile没有写入文件(同样使用资源管理器和命令行进行了检查)。
WriteFile之后,每当我在资源管理器中双击该文件或对该文件进行任何操作时,所有操作都表现得好像该文件不存在一样。
所有API都返回了它们各自的成功代码。绝对没有错误。
在我停止程序并退出IDE之后,我进入资源管理器并尝试删除包含上述创建的文件的文件夹,结果显示如下:
图片
尽管如此,该文件已被删除。
注:以上情况并非总是发生。
由于上述调试,我得出结论,由于整个操作系统的异常行为,我的程序也表现出奇怪的行为。我的程序没有错(因为在那些可恶的电力故障之前,一切都运行完美)。

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

我的问题:在C语言中,是否有编程方法可以检查硬盘是否良好?此检测不需要100%正确。但我希望此检查非常快(因为我会进行许多写入等操作)。

我需要进行此检查,因为目前,我的程序的其余部分认为文件已经存在并且准备就绪(因为没有返回错误),从而导致各种奇怪的行为。作为可能不知道自己硬盘出现故障的用户,我希望我的程序建议运行磁盘检查。


https://www.google.co.uk/search?q=windows+check+disk+for+errors - NPE
@NPE,_"有没有办法在C语言中编程检查硬盘是否正常?"_ - Anish Ramaswamy
2
除非您的程序是某种应该知道此类问题的实用程序,否则建议用户检查其磁盘错误会非常奇怪。 - msam
@msam,那个消息只是一种可能性。但是如果我的程序发现这样的情况,我绝对不希望它继续运行。 - Anish Ramaswamy
你尝试过在其他位置创建文件吗?例如:手动在某个位置创建一个文件,写入内容并在之后删除它。现在再次尝试以编程方式执行相同的操作。你得到了什么结果? - Abhineet
显示剩余2条评论
2个回答

6

你最好查看S.M.A.R.T预故障通知,通过允许在出现问题之前提前警告驱动器问题的API。这里是我快速找到的一个实现,似乎适用于你的平台,但我没有测试过。

我怀疑有更好的选择。这种S.M.A.R.T方法的主要优点是在问题变得重要之前发现问题。然而,许多操作系统都内置了此功能,在除磁盘实用程序之外的应用程序级别进行此操作是罕见的。


0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接