2010-11-09 18 views

Respuesta

38

No, esto no cerrará el StreamReader. Tienes que cerrarlo. Usando lo hace por usted (y la dispone por lo que se GC'd antes):

using (StreamReader r = new StreamReader("file.txt")) 
{ 
    allFileText = r.ReadToEnd(); 
} 

o alternativamente en .Net 2 se puede utilizar el nuevo archivo. miembros estáticos, entonces no es necesario que cierre nada:

variable = File.ReadAllText("file.txt"); 
+2

'ReadAllText' se agregó en .Net 2.0 (http://msdn.microsoft.com/en-us/library/system.io.file.readalltext(v=VS.80).aspx) – JaredPar

+0

Gracias Jared (respuesta editada) TBH solo lo encontré recientemente. Una vez que conoces una forma en general, tienden a seguir con lo que funciona. – badbod99

17

Siempre debe disponer de sus recursos.

// the using statement automatically disposes the streamreader because 
// it implements the IDisposable interface 
using(var reader = new StreamReader(file)) 
{ 
    variable = reader.ReadToEnd(); 
} 

O por lo menos llamar manualmente:

reader = new StreamReader(file); 
variable = reader.ReadToEnd(); 
reader.Close(); 
+1

Para alguien que no sabe que la instrucción de uso se ocupa automáticamente de esto, sería confuso. No hay voto a la baja, pero tampoco voto positivo, porque esto simplemente no está redactado para que un principiante lo entienda. – David

+0

Agregado un comentario que ser útil – Dismissile

+1

frijoles fríos. +1. – David

6

Usted necesita deshacerse de objetos que implementan IDisposable. Use una declaración using para asegurarse de que se elimine sin llamar explícitamente al método Dispose.

using (var reader = new StreamReader(file)) 
{ 
    variable = reader.ReadToEnd(); 
} 

Como alternativa, utilice File.ReadAllText(String)

variable = File.ReadAllText(file); 
+0

+1 pero le diría "no es necesario que lo cierres explícitamente si usas una declaración de" uso "para asegurarte de que se elimine. +1 porque está redactado con más claridad que la respuesta de Dismissile. Su respuesta no hace nada para explicar que la declaración de uso dispondrá de los recursos para usted, y alguien que no lo sabía se quedaría rascándose la cabeza. – David

0

Es una buena práctica para cerrar StreamReader. Utilice la siguiente plantilla:

string contents; 

using (StreamReader sr = new StreamReader(file)) 
{ 
    contents = sr.ReadToEnd(); 
} 
0

Es mejor utilizar la palabra clave usando; entonces no es necesario cerrar explícitamente nada.

4

Sí, siempre que se crea un objeto desechable debe disponer de él de preferencia con una instrucción using

using (var reader = new StreamReader(file)) { 
    variable = reader.ReadToEnd(file); 
} 

En este caso, sin embargo, puedes usar el método File.ReadAllText para simplificar la expresión

variable = File.ReadAllText(file); 
+0

Esto fue útil aunque badbod99 suministró algunos detalles más. Estoy asumiendo que esos detalles son correctos ya que estoy solo ingresando al código fuera de javascript. –

Cuestiones relacionadas