Muss nach dem Aufruf von ReadAllText eine Datei geschlossen werden?

7

Ich mache folgendes:

%Vor%

Das funktioniert vollkommen in Ordnung. Was ich fragen möchte, ist, wenn ich die Datei oder etwas Ähnliches schließen muss, nachdem ich davon gelesen habe. Und wenn ja, wie?

    
Subby 16.07.2013, 08:21
quelle

4 Antworten

17

Nein, Sie müssen die Datei nicht explizit schließen, File.ReadAllText erledigt das für Sie.

Die Dokumentation enthält diese Informationen sehr explizit:

  

Diese Methode öffnet eine Datei, liest jede Zeile der Datei und fügt dann jede Zeile als Element einer Zeichenfolge hinzu. Es schließt dann die Datei.
  [...]
  Das Dateihandle wird garantiert durch diese Methode geschlossen, auch wenn Ausnahmen ausgelöst werden.

    
Daniel Hilgarth 16.07.2013 08:22
quelle
8

Sie müssen nichts schließen, wenn Sie File.ReadAllText verwenden, da der Leseprozess für den Underling-Stream implizit geschlossen ist.

MSDN: File.ReadAllText

  

Öffnet eine Textdatei, liest alle Zeilen der Datei und schließt dann die   Datei .

Hier ist die Implementierung in .NET 4 (ILSpy):

%Vor%

Die using Anweisung entbindet die StreamReader (auch bei Fehler), die sie auch schließt.

    
Tim Schmelter 16.07.2013 08:23
quelle
4

Ich weiß, dass diese Frage beantwortet wurde und dies ist jetzt fast ein Jahr, aber für diejenigen, die diese Frage suchen und lesen, möchte ich vorschlagen, dass Sie eine Datei schließen, wenn Sie damit fertig sind, oder zumindest eine Untersuchung wie meine Antwort machen zeigt.

Ich bin kein Programmierer, aber ich bin in letzter Zeit auf diese Situation gestoßen.

Ich habe ein WinForms c # -Programm erstellt und File.ReadAllText verwendet, um Text in eine Zeichenfolge zu kopieren. Danach habe ich versucht, die Datei direkt aus dem Ordner zu löschen, nicht durch das Programm, aber ich habe einen Fehler bekommen, dass die Datei in einem anderen Programm noch geöffnet war. Ich habe dann aufgehört, das Programm auszuführen und konnte die Datei löschen.

Das ist meine Erfahrung in Visual Studio 2012 Ultimate. Es könnte etwas anderes machen, aber das hat es für mich getan.

Wenn ich StreamReader.ReadToEnd und dann StreamReader.Close für die gleiche Datei verwendet habe, hatte ich kein Problem, die Datei während der Ausführung des Programms zu löschen.

    
Alaba Baju 29.04.2014 21:47
quelle
2

Sie müssen nur IDisposable Instanzen schließen, normalerweise mit mit , z. B .:

%Vor%

, da Sie keine IDisposable-Instanz in Ihrem Code haben (File.ReadAllText gibt String zurück, der nicht IDisposable ist) Sie haben nichts zum Schließen / Dispose

    
Dmitry Bychenko 16.07.2013 08:34
quelle

Tags und Links