Presta atención porque en este escrito hallarás la solución que buscas.
Solución:
… pero ¿es posible obtener mensajes de error un poco más detallados?
Si. Adelante y atrapa IOException
, y usa el Exception.ToString()
método para que se muestre un mensaje de error relativamente relevante. Tenga en cuenta que las excepciones generadas por .NET Framework proporcionarán estas útiles cadenas, pero si va a lanzar su propia excepción, debe recordar conectar esa string en el Exception
constructor de, como:
throw new FileNotFoundException("File not found");
Además, absolutamente, según Scott Dorman, use eso using
declaración. Sin embargo, lo que hay que notar es que el using
la declaración en realidad no catch
cualquier cosa, que es la forma en que debería ser. Su prueba para ver si el archivo existe, por ejemplo, introducirá una condición de carrera que puede ser bastante molesta. Realmente no te hace ningún bien tenerlo ahí. Entonces, ahora, para el lector tenemos:
try
using (StreamReader reader = file.OpenText())
// Your processing code here
catch (IOException e)
UI.AlertUserSomehow(e.ToString());
En resumen, para operaciones básicas de archivos:
1. Utilizar using
2, envuelva la declaración de uso o la función en un try
/catch
ese catch
es IOException
3. Utilice Exception.ToString()
en tus catch
para obtener un mensaje de error útil
4. No intente detectar usted mismo problemas de archivos excepcionales. Deje que .NET haga el lanzamiento por usted.
Lo primero que debe cambiar son sus llamadas a StreamWriter y StreamReader para envolverlas en una declaración de uso, como esta:
using (StreamReader reader = file.OpenText())
List text = new List();
while (!reader.EndOfStream)
text.Add(reader.ReadLine());
Esto se encargará de llamar a Close y Dispose por usted y, de hecho, lo envolverá en un bloque de prueba / finalmente para que el código compilado real se vea así:
StreamReader reader = file.OpenText();
try
List text = new List();
while (!reader.EndOfStream)
text.Add(reader.ReadLine());
finally
if (reader != null)
((IDisposable)reader).Dispose();
El beneficio aquí es que se asegura de que la transmisión se cierre incluso si se produce una excepción.
En cuanto al manejo de excepciones más explícito, realmente depende de lo que desee que suceda. En su ejemplo, prueba explícitamente si el archivo existe y lanza una FileNotFoundException que puede ser suficiente para sus usuarios, pero puede que no.
Sección de Reseñas y Valoraciones
Si piensas que te ha resultado de utilidad este post, te agradeceríamos que lo compartas con otros seniors de este modo nos ayudas a extender nuestro contenido.