2008-12-03 22 views
7

¿Es posible de alguna manera para cerrar StreamReader después de llamar método ReadToEnd en la construcción de esta manera:StreamReader cerrar Después de ReadToEnd

string s = new StreamReader("filename", Encoding.UTF8).ReadToEnd(); 

será también aceptó Cualquier construcción alternativa elegante con la misma semántica.

Respuesta

12

creo que el método que realmente después es File.ReadAllText, si sólo está tratando de leer todo el texto de un archivo en el el código más corto posible.

Si no especifica la codificación, usará UTF-8 automáticamente.

+0

¡Genial! ¡Gracias! –

2

Se puede usar un comunicado using, que automáticamente cierra la corriente:

string s = null;  
using (StreamReader reader = new StreamReader("filename", Encoding.UTF8) { s = reader.ReadToEnd(); } 
+0

Lo hago de esta manera ahora, pero espero que haya una solución más corta sin una declaración explícita de la variable StreamReader. –

+0

La respuesta de @ jon-skeet es el camino a seguir –

2

No, no hay, pero siempre es una buena práctica utilizar desechar objetos que heredan forma IDisposable. Si no se hace esto en un bucle obtendrá pérdidas de memoria

string s = string.Empty; 
using(StreamReader sr = new StreamReader("filename", Encoding.UTF8)) 
{ 
    s = sr.ReadToEnd(); 
} 
+1

No es necesario ni tiene que llamar a Cerrar ni a Eliminar. Solo ponerlo en una declaración de uso es suficiente. –

+0

Estoy de acuerdo, pero todos los desarrolladores deben saber que los objetos costosos deben cerrarse y desecharse si ya no los usa. – JSC

+0

No, deben cerrarse * o * eliminarse. Agregar una llamada a Cerrar como eso solo agrega desorden. Además, si * were * requerido, tendría que ponerlo en un bloque finally de todos modos. –

Cuestiones relacionadas