Wie verwende ich die StreamWriter-Klasse richtig?

8

Ich verwende StreamWriter class für Dateioperationen. Gibt es Probleme in diesem Code, die ich nicht sehe?

Wie muss ich es in einen try catch finally Block setzen?

%Vor%     
vettori 13.07.2012, 08:57
quelle

5 Antworten

26

Was ist mit deinem Code falsch? Wenn eine Ausnahme auftritt, bevor Sie den Stream schließen, bleibt der Stream geöffnet und Systemressourcen werden nicht freigegeben:

%Vor%

Sie müssen also sicher sein, dass der Stream geschlossen wird. Dies könnte durch try...finally block:

erreicht werden %Vor%

Aber StreamWriter implementiert IDisposable -Schnittstelle, so dass Sie den C # -Compiler durch Wrapping automatisch für Sie erledigen lassen können Writer-Verwendung in using block:

%Vor%

Dieser Code wird wie folgt kompiliert:

%Vor%

Der einzige Unterschied zwischen der manuellen Implementierung ist der Null-Check und die Methode Dispose wird anstelle von Close aufgerufen. Aber tatsächlich, wenn Sie Close() oder Dispose() aufrufen, wird der gleiche Code ausgeführt:

%Vor%

Sie können mehr über Methodenimplementierung bereitstellen lesen.

    
Sergey Berezovskiy 13.07.2012, 09:12
quelle
6

Sie sollten wahrscheinlich eine using-Anweisung verwenden:

%Vor%

Am Ende des using-Blocks wird der StreamWriter.Dispose aufgerufen, ob eine Ausnahme aufgetreten ist oder der Code erfolgreich ausgeführt wurde.

    
Daniel Sklenitzka 13.07.2012 09:00
quelle
5

Sie möchten Folgendes verwenden:

%Vor%

Sie brauchen nicht das Close .

    
John Saunders 13.07.2012 09:00
quelle
5

Wickeln Sie es in einen using -Block

%Vor%

Stellen Sie sicher, dass Ihre Benennung gut ist, also sollte streamFolder wahrscheinlich ein fName sein. Sie können diesen Code auch in try-catch-finally setzen, wenn Sie das Gefühl haben, dass Sie einige IO (oder andere) Ausnahmen behandeln können:

%Vor%     
oleksii 13.07.2012 09:01
quelle
-1

System.IO.StreamWriter ist ein System.IDisposable

Sie müssen es entsorgen. Und warum schließt du etwas, das du nicht öffnest?

    
user1485585 13.07.2012 09:01
quelle

Tags und Links