當調用GetLastError
時,某些Windows函數(如CreateFile
)可能會返回巨大的各種錯誤代碼,並且檢查每個可能的錯誤代碼都是不切實際的 - 通常沒有足夠的文檔,並且經常添加新的錯誤代碼。我應該處理哪些錯誤?哪些是「致命的」?
其中一些(如訪問衝突或無效參數)是由程序員錯誤引起的,不應允許繼續執行程序。然而,其他因素則是由於其他因素造成的,例如文件許可權不良,共享違規,文件名錯誤等,開發人員很少或根本無法控制。
我想處理所有「非關鍵」錯誤(如錯誤的文件名),同時允許「嚴重錯誤」(例如訪問違規)使我的程序崩潰。
理想情況下,我會說:
// ... 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
當我說非凡時,我的意思就是那個。訪問違規和內存不足是兩大問題;可能有其他人,但你明白了。如果CreateFile()失敗導致你的程序崩潰,那麼你做錯了恕我直言。 – Luke