Một số chức năng của Windows chẳng hạn như CreateFile
có thể trả lại nhiều mã lỗi khi GetLastError
được gọi và không kiểm tra mọi mã lỗi có thể xảy ra - thường không có đủ tài liệu và mã lỗi mới được thêm vào thường xuyên.Tôi nên xử lý các lỗi nào? Cái nào là "tử vong"?
Một số trong số chúng (chẳng hạn như vi phạm truy cập hoặc thông số không hợp lệ) là do lỗi lập trình viên và không cho phép tiếp tục thực hiện chương trình. Tuy nhiên, những người khác là do các yếu tố khác, chẳng hạn như quyền tập tin xấu, chia sẻ vi phạm, tên tập tin xấu, vv, mà các nhà phát triển có ít hoặc không có kiểm soát.
Tôi muốn xử lý tất cả các lỗi "không quan trọng" (chẳng hạn như tên tệp không hợp lệ), đồng thời cho phép "các lỗi nghiêm trọng" (chẳng hạn như vi phạm truy cập) làm hỏng chương trình của tôi.
Lý tưởng nhất, tôi sẽ nói:
// ... an error occurred. Is it a programmer error?
if (IsErrorCritical(GetLastError()))
{
// Yes; raise an exception, crashing the program.
RaiseException(GetLastError(), 0, 0, NULL);
}
Làm thế nào để quyết định mã lỗi được an toàn để ngăn chặn (ví dụ, khi liệt kê các tập tin trên một đĩa), khi tôi có thể không có khả năng dự đoán mỗi kết quả ?
Tôi cho rằng một chương trình sẽ không bao giờ gặp sự cố ngoại trừ trong trường hợp thật sự ngoại lệ (vi phạm truy cập, v.v.). Việc không tạo tệp phải là lỗi dự kiến và được xử lý một cách duyên dáng. Bên cạnh đó, ngay sau khi một số mã lỗi mới được thêm vào, hàm IsErrorCritical() của bạn sẽ trở nên lỗi thời. – Luke
Phải, nhưng làm thế nào để tôi biết nếu một cái gì đó "thực sự đặc biệt"? Đó là câu hỏi .. – Mehrdad
Khi tôi nói đặc biệt, tôi có nghĩa là chính xác điều đó. Vi phạm truy cập và hết bộ nhớ là hai lỗi lớn; có thể có những người khác, nhưng bạn có được ý tưởng. Nếu CreateFile() không làm cho chương trình của bạn bị lỗi thì bạn đang làm sai IMHO. – Luke