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?
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");
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();
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);
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);
C'est une bonne pratique pour fermer StreamReader
. Utilisez le modèle suivant:
string contents;
using (StreamReader sr = new StreamReader(file))
{
contents = sr.ReadToEnd();
}
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.