2010-11-09 15 views

Odpowiedz

38

Nie, to nie zamknie StreamReadera. Musisz to zamknąć. Korzystanie robi to za Ciebie (i zbywa go więc to GC'd wcześniej):

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

Lub alternatywnie w .NET 2 można korzystać z nowego pliku. statyczne elementy, wtedy nie musisz niczego zamykać:

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

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

+0

Dzięki Jared (edytowana odpowiedź). TBH niedawno się z tym spotkałem. Kiedy już znasz jeden ze sposobów, masz tendencję do trzymania się tego, co działa. – badbod99

17

Zawsze należy pozbyć się swoich zasobów.

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

Albo przynajmniej nazywając ją ręcznie:

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

Dla kogoś, kto nie wie, że instrukcja użycia automatycznie zaopiekuje się tym dla ciebie, byłoby to mylące. Brak głosowania w dół, ale nie ma głosu up albo dlatego, że nie jest to po prostu sformułowane dla początkujących, aby zrozumieć. – David

+0

Dodano komentarz, aby być pomocne – Dismissile

+1

Fajne ziarna. +1. – David

6

trzeba utylizować obiektów, które implementują IDisposable. Użyj instrukcji using, aby się upewnić, że zostanie ona usunięta bez jawnego wywoływania metody Dispose.

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

Alternatywnie, użyj File.ReadAllText(String)

variable = File.ReadAllText(file); 
+0

+1 ale powiedziałbym "nie musisz tego wyraźnie zamykać, jeśli użyjesz instrukcji" using ", aby upewnić się, że zostanie ona usunięta. +1, ponieważ jest to wyraźniej sformułowane niż odpowiedź Dismissile'a. Jego odpowiedź nie wyjaśnia, że instrukcja użycia będzie dysponować zasobami dla ciebie, a ktoś, kto nie wiedział, że pozostanie, drapie się po głowie – David

0

To jest dobre praktyki, aby zamknąć StreamReader. Użyj następującego szablonu:

string contents; 

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

Lepiej pomocą użyciu słowa kluczowego; wtedy nie musisz niczego jawnie zamykać.

4

Tak, podczas tworzenia jednorazowy obiekt należy wyrzucać go najlepiej z wykorzystaniem rachunku

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

W tym przypadku jednak można po prostu użyć metody File.ReadAllText Aby uprościć wyraz

variable = File.ReadAllText(file); 
+0

To było pomocne, chociaż badbod99 dostarczył kilka dodatkowych informacji.Myślę, że te szczegóły są poprawne, ponieważ jestem "m" tylko dostaję się do kodu poza javascript. –

Powiązane problemy