2014-11-05 13 views
5

Ogólnie rzecz biorąc, "używanie" jest preferowanym podejściem do prawidłowego dostępu i utylizacji strumienia pliku.Czy istnieje sposób użycia "używania", ale pozostawić plik otwarty?

Często muszę pozostawić plik otwarty (jak poniżej). Czy w tym przypadku można zastosować strukturę "wykorzystującą"?

public class logger 
{ 
    private StreamWriter sw; 
    public logger(string fileName) 
    { 
     sw = new StreamWriter(fileName, true); 
    } 

    public void LogString(string txt) 
    { 
     sw.WriteLine(txt); 
     sw.Flush(); 
    } 

    public void Close() 
    { 
     sw.Close(); 
    } 
} 
+11

Nie ma sensu używanie opcji 'using' w metodzie, jeśli nie zamierzasz zamykać strumienia w tym zakresie. Ogólny wzorzec dotyczyłby implementacji narzędzia 'logger' [' IDisposable'] (http://msdn.microsoft.com/en-us/library/system.idisposable (v = vs.110) .aspx), a następnie w zasadzie sprawiasz, że klasa wywołująca martwi się, kiedy zostanie usunięta (używając 'używając' lub nie) –

+2

Użyj NLog lub innego frameworka # –

+0

@ManInMoon jak chciałbyś użyć * używając * w tym przypadku, w pseudo-kodzie? – galenus

Odpowiedz

4

Tak, można dokonać Logger jednorazowe i mieć go wyrzucać strumienia w swojej metodzie rozporządzać.

+1

W void Dispose() miałeś nazywać sw.Close() lub sw.Dispose() poprawny – ManInMoon

+3

@ManInMoon 'Dispose' zamknie strumień - jest to szczegół implementacji, ale jest udokumentowany. –

+0

Istnieje również dobry tekst na temat SO [Właściwość korzystać z interfejsu IDisposable] (http://stackoverflow.com/questions/538060/proper-of-the-idisposable-interface) z dodatkowymi informacjami na temat interfejsu . –

Powiązane problemy