Dois-je fermer explicitement le StreamReader en C# lorsque je l'utilise pour charger un fichier dans une variable string?

Exemple:

variable = new StreamReader( file ).ReadToEnd();

Est acceptable?

31
demandé sur Matt Ralston 2010-11-09 20:17:41

6 réponses

Non, cela ne fermera pas le StreamReader. Vous avez besoin de le fermer. Utiliser fait ceci pour vous (et le dispose de sorte QU'il est GC'd plus tôt):

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

ou alternativement dans .Net 2 Vous pouvez utiliser le nouveau fichier. les membres statiques, alors vous n'avez pas besoin de fermer quoi que ce soit:

variable = File.ReadAllText("file.txt");
40
répondu badbod99 2012-05-18 09:15:31

vous devriez 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();
19
répondu Dismissile 2010-11-09 17:24:55

Vous devez Disposer des objets qui implémentent IDisposable. Utiliser un using déclaration pour s'assurer qu'il est éliminé sans appeler explicitement la méthode Dispose.

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

Alternativement, utilisez File.ReadAllText(String)

variable = File.ReadAllText(file);
6
répondu Greg 2010-11-09 17:26:39

Oui, chaque fois que vous créez un objet jetable, vous devez vous en débarrasser de préférence avec une déclaration d'utilisation

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

dans ce cas, vous pouvez utiliser le File.ReadAllText méthode pour simplifier l'expression

variable = File.ReadAllText(file);
4
répondu JaredPar 2010-11-09 17:22:12

C'est une bonne pratique pour fermer StreamReader. Utilisez le modèle suivant:

string contents;

using (StreamReader sr = new StreamReader(file)) 
{
   contents = sr.ReadToEnd();
}
0
répondu Bernard 2010-11-09 17:20:39

il est préférable d'utiliser le en utilisant mot clé; alors vous n'avez pas besoin de fermer explicitement quoi que ce soit.

0
répondu Paul Sonier 2010-11-09 17:20:54