2010-11-09 28 views

Répondre

38

Non, cela ne fermera pas StreamReader. Vous devez le fermer. En utilisant le fait pour vous (et il dispose donc il GC'd plus tôt):

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

Ou bien en .Net 2, vous pouvez utiliser le nouveau fichier. membres statiques, alors vous n'avez pas besoin de fermer quoi que ce soit:

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

'ReadAllText' a été ajouté dans .Net 2.0 (http://msdn.microsoft.com/en-us/library/system.io.file.readalltext(v=VS.80).aspx) – JaredPar

+0

Merci Jared (édité la réponse). TBH Je ne l'ai rencontré que récemment. Une fois que vous savez d'une façon que vous avez tendance à rester fidèle à ce qui fonctionne. – badbod99

17

Vous devez toujours disposer de vos ressources.

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

Ou au moins l'appeler manuellement:

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

Pour quelqu'un qui ne sait pas que la déclaration using prend automatiquement soin de cela pour vous, cela serait déroutant. Pas de vote négatif, mais pas de vote non plus parce que ce n'est pas formulé pour un débutant à comprendre. – David

+0

A ajouté un commentaire pour être utile – Dismissile

+1

Cool beans. +1 – David

6

Vous devez vous débarrasser des objets qui mettent en œuvre IDisposable. Utilisez une instruction using pour vous assurer qu'il est éliminé sans appeler explicitement la méthode Dispose.

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

Vous pouvez également utiliser File.ReadAllText(String)

variable = File.ReadAllText(file); 
+0

+1 mais je dirais que "vous n'avez pas besoin de le fermer explicitement si vous utilisez une instruction" using "pour vous assurer qu'il est éliminé +1 parce que cela est plus clair que la réponse de Dismissile. la déclaration using disposera des ressources pour vous, et quelqu'un qui ne le savait pas se gratterait la tête – David

0

Il est bon de fermer StreamReader. Utiliser le modèle suivant: Vous êtes mieux d'utiliser le mot-clé utilisant

string contents; 

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

; alors vous n'avez pas besoin de fermer explicitement quelque chose.

4

Oui, chaque fois que vous créez un objet jetable, vous devez disposer de préférence avec une instruction à l'aide

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

Dans ce cas, si vous pouvez simplement utiliser la méthode File.ReadAllText pour simplifier l'expression

variable = File.ReadAllText(file); 
+0

Cela a été utile, bien que badbod99 ait fourni quelques détails supplémentaires, je suppose que ces détails sont corrects juste juste entrer dans le code en dehors de javascript. –