38 votes

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-ce acceptable ?

48voto

badbod99 Points 3588

Non, cela ne fermera pas le StreamReader. Tu dois le fermer. Utiliser fait cela 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 bien dans .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");

19voto

Dismissile Points 12054

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();

6voto

Greg Points 11248

Vous devez éliminer les objets qui implémentent 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();
}

Sinon, utilisez File.ReadAllText(String)

variable = File.ReadAllText(file);

4voto

JaredPar Points 333733

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

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

Dans ce cas, bien que vous puissiez simplement utiliser la méthode File.ReadAllText pour simplifier l'expression

variable = File.ReadAllText(file);

0voto

Bernard Points 5492

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

string contents;

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X