¿Cuál es el significado de System.IO.FileNotFoundException?
Tengo este fragmento de código en un programa C#:
ListOfCabins();
ListOfWoodTypes();
La primera función es la siguiente:
private void ListOfCabins()
{
Logger.Info($"Inicio de la función ListOfCabins()");
try
{
}
catch (Exception ex)
{
...
}
Logger.Info($"Fin de la función ListOfCabins()");
}
La otra función es la siguiente:
private void ListOfWoodTypes()
{
Logger.Info($"Inicio de la función ListOfWoodTypes()");
...
Logger
es un objeto típico de NLog
:
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
En los registros, veo:
Fin de la función ListOfCabins()
No veo:
Inicio de la función ListOfWoodTypes()
Mi aplicación se bloquea, en el registro de eventos veo:
Aplicación: ...
Versión del framework: v4.0.30319
Descripción: El proceso se terminó debido a una excepción no controlada.
Información de la excepción: System.IO.FileNotFoundException
en ...ListOfWoodTypes()
en ...
Tengo diferentes preguntas aquí:
- ¿Significa que una
System.IO.FileNotFoundException
indica que mi aplicación intenta abrir un archivo externo que no está presente, o es algo similar a un proceso de Java que falta un archivo*.class
? - ¿Por qué una
System.IO.FileNotFoundException
no es capturada por mi cláusulatry ... catch (Exception ex)
? - ¿Qué pasa con los registros? Espero ver al menos la primera línea de la función
ListOfWoodTypes()
. ¿Significa esto que hay algún almacenamiento en búfer en la tecnologíaNLog
, que causa un retraso en la creación de registros deNLog
en caso de un bloqueo?
Edit1, no es posible depurar
Estoy desarrollando este programa en mi propia PC, lo compilo aquí, pero luego copio el ejecutable en la PC de mi cliente, por lo que no es posible depurar.
Solicitar reapertura
Mi pregunta no tiene nada que ver con “ .NET Global exception handler in console application “, se trata específicamente de esta excepción. Además, esta excepción en particular no se maneja completamente en el registro de eventos de Windows, como se puede ver en mi propia respuesta.
davy.ai
Respuestas
Una
System.IO.FileNotFoundException
significa que tu aplicación está intentando acceder a un archivo que no existe en la ubicación especificada.La
System.IO.FileNotFoundException
no es capturada por tu cláusulatry ... catch (Exception ex)
porque la excepción que se está lanzando no es del tipoException
, sino del tipoFileNotFoundException
. Si deseas capturar esta excepción específica, reemplazacatch (Exception ex)
porcatch (FileNotFoundException ex)
.En cuanto a los registros, es posible que haya algún almacenamiento en búfer en NLog que haya causado el retraso en el registro de la primera línea de la función
ListOfWoodTypes()
. Sin embargo, dado que tu aplicación se bloqueó, es probable que las declaraciones de registro no hayan tenido oportunidad de ser guardadas en el archivo de registro. Para asegurarte de que las declaraciones de registro se guarden inmediatamente, puedes llamar aLogManager.Flush()
después de registrar eventos importantes.