3

最近、数回の停電の後、私のコンピューターはかなりめちゃくちゃになりました (BSOD がときどき発生し、OS 全体が非常に奇妙な動作をします)。

これで、コンピューターがめちゃくちゃになる前に完全に正常に実行されたプログラムができました。このプログラムは基本的に、 を使用してファイルを作成し、 を使用CreateFileして書き込みますWriteFile。このプログラムには、このファイルに基づいて他の処理を行うものもあります。プログラム全体も同様に奇妙な動作をしていることに気付きました。

私のデバッグ結果:

  • その後CreateFile、ファイルが本来あるべき場所に作成されることに気付きました (エクスプローラーとコマンドラインを使用して確認)。
  • WriteFileファイルに書き込みませんでした (再度エクスプローラーとコマンドラインを使用して確認しました)。
  • その後WriteFile、エクスプローラーでファイルをダブルクリックするか、そのファイルに対して何かを行うたびに、すべてがファイルが存在しないかのように動作しました。
  • すべての API がそれぞれの成功コードを返しました。絶対にエラーはありません。
  • プログラムを停止して IDE を終了した後、エクスプローラーに移動し、上記で作成したファイルを含むフォルダーを削除しようとすると、次のように表示されました。

    フォルダを削除しようとしたときのエラー

  • ファイルは削除されましたが。

注:上記は常に発生するとは限りません。

上記のデバッグにより、OS全体の動作がおかしいため、プログラムも動作がおかしいという結論に達しました。私のプログラムに問題はありません (最悪の停電が発生する前はすべてが完璧に機能していたからです)。

とにかく、マイクロソフトはそのエラーについてこう言っています。基本的に、私のハードドライブには多くの不良セクタがあります。

私の質問:ハード ドライブが C で正常かどうかをプログラムで確認する方法はありますか? この検出は 100% 正しい必要はありません。ただし、このチェックを非常に高速にしたいと考えています (書き込みなどを頻繁に行うため)。

このチェックが必要なのは、プログラムの残りの部分が、ファイルが存在し、準備ができていると見なし (何もエラーが返されなかったため)、あらゆる種類の奇妙な動作が続くためです。自分のハードドライブがゾンクされていることを知らないかもしれないユーザーとして、プログラムにディスクチェックの実行を提案してもらいたいと思います。

4

2 に答える 2

6

ドライブの問題が発生する前に早期に警​​告できる API を介して、SMART 事前障害通知を確認することをお勧めします。これは、私がすぐに見つけた実装の 1 つです。これは、お使いのプラットフォームに適しているようですが、まだテストしていません。

もっと良いものがあると思います。この SMART アプローチの主な利点は、重要になる前に問題を発見できることです。ただし、多くのオペレーティング システムにはこの機能が組み込まれており、ディスク ユーティリティ以外でアプリケーション レベルで実行することはほとんどありません。

于 2013-03-28T10:02:14.923 に答える
0

アプリケーションは OS の上に構築されているため、そのエラー レポートに依存し、それを無視する必要があります。特定のエラーが、ディスク チェックが必要であることを意味するとは限りません。

あなたの場合、フル ディスク チェックを実行し、通常どおり続行することをお勧めします。

于 2013-03-28T10:54:07.013 に答える