Algunas funciones de Windows como CreateFile
podría volver una variedad enorme de códigos de error cuando GetLastError
se llama, y es poco práctica para comprobar si todos los códigos de error posible - a menudo no hay suficiente documentación y nuevos códigos de error se añaden con frecuencia.¿Qué errores debo manejar? ¿Cuáles son "fatales"?
Algunos de ellos (como infracciones de acceso o parámetros no válidos) se deben a un error del programador y no deberían permitir la continuación de la ejecución del programa. Sin embargo, otros se deben a otros factores, como permisos de archivos incorrectos, violaciones de uso compartido, nombres de archivos incorrectos, etc., sobre los cuales el desarrollador tiene poco o ningún control.
Me gustaría manejar todos los errores "no críticos" (como los nombres de archivos incorrectos), al tiempo que permite que los "errores críticos" (como las violaciones de acceso) bloqueen mi programa.
Idealmente, me estaría diciendo:
// ... an error occurred. Is it a programmer error?
if (IsErrorCritical(GetLastError()))
{
// Yes; raise an exception, crashing the program.
RaiseException(GetLastError(), 0, 0, NULL);
}
¿Cómo decidir qué códigos de error son seguros para suprimir (por ejemplo, cuando se enumeran los archivos en un disco), cuando no puedo posiblemente predecir cada uno de los resultados ?
Argumentaría que un programa nunca debe fallar excepto en circunstancias verdaderamente excepcionales (violación de acceso, etc.). No crear un archivo debe ser una falla esperada y debe manejarse de manera elegante. Además, tan pronto como se agregue un nuevo código de error, su función IsErrorCritical() quedaría desactualizada. – Luke
Correcto, pero ¿cómo sé si algo es "realmente excepcional"? Esa es la pregunta ... – Mehrdad
Cuando digo excepcional me refiero exactamente a eso. Las violaciones de acceso y la falta de memoria son las dos más importantes; puede haber otros, pero entiendes la idea. Si la falla de CreateFile() hace que tu programa se cuelgue, entonces lo estás haciendo mal en mi humilde opinión. – Luke