CreateFile
のようないくつかのWindows関数は、GetLastError
が呼び出されたときにGetLastError
の巨大なのさまざまなエラーコードを返す可能性があり、すべてのエラーコードをチェックするのは実用的ではありません。どのエラーを処理する必要がありますか?どちらが「致命的」ですか?
それらの一部(アクセス違反や無効なパラメーターなど)はプログラマーのエラーによるもので、プログラムの実行の継続を許可すべきではありません。しかし、他の要因は、ファイルのパーミッションの悪化、共有違反、悪いファイル名など、開発者がほとんどまたはまったく制御できない他の要因によるものです。
「重大なエラー」(アクセス違反など)でプログラムがクラッシュするのを許しながら、「重要ではない」エラー(悪いファイル名など)をすべて処理したいと考えています。
理想的には、私は言っているでしょう:
// ... an error occurred. Is it a programmer error?
if (IsErrorCritical(GetLastError()))
{
// Yes; raise an exception, crashing the program.
RaiseException(GetLastError(), 0, 0, NULL);
}
どのようなエラーコードを抑制することができます(たとえば、ディスク上のファイルを列挙するとき) ?
私は、プログラムが本当に例外的な状況(アクセス違反など)を除いて決してクラッシュしてはならないと主張します。ファイルの作成に失敗した場合は、予期せぬ障害であり、適切な方法で処理する必要があります。また、新しいエラーコードが追加されるとすぐに、IsErrorCritical()関数が古くなってしまいます。 – Luke
ですが、何か「本当に例外的な」ものがあるかどうかはどうすればわかりますか?それは質問です.. – Mehrdad
私が例外的と言うとき、私はそれを正確に意味します。アクセス違反とメモリ不足は2つの大きな問題です。他にもあるかもしれないが、あなたはそのアイデアを得る。 CreateFile()が失敗してプログラムがクラッシュすると、間違ったIMHOが実行されます。 – Luke