Erstellen dann Löschen von Datei verursacht IOException

8

Eine Anwendung muss eine Datei in einem Verzeichnis erstellen, etwas im Verzeichnis ausführen und anschließend die Datei löschen. Zum Beispiel den Quellcode unter:

%Vor%

Wenn "etwas" ein Prozess ist, der nur eine sehr kurze Zeitspanne benötigt, löst File.Delete IOException aus (die Datei wird von einem anderen Prozess verwendet). Laut einem anderen SO Post: Kann Verzeichnis nicht mit Directory.Delete (Pfad, true) löschen sollte der Aufruf von Thread.Sleep (0) den vorherigen Prozess beenden. Aber auch mit

%Vor%

es wird immer noch dieselbe IOException ausgelöst.

Die Lösung, die ich bekommen habe, ist eine while-Schleife, die versucht, die Datei wiederholt zu löschen, bis sie gelöscht wird. Aber ich frage mich, ob es eine bessere Lösung gibt.

    
Jim 08.08.2012, 10:49
quelle

4 Antworten

16

File.Create gibt Ihnen einen FileStream zurück, der ein offenes Handle für diese Datei darstellt. Wickeln Sie das Ergebnis dieses Aufrufs in einen using-Block, um den Handle deterministisch zu schließen.

    
usr 08.08.2012, 10:52
quelle
21

Die Methode File.Create erstellt einen Dateistream, den Sie benötigen richtig entsorgen. Ich schlage folgenden Code vor:

%Vor%

Beachten Sie, dass dieser Code genau wie in der MSDN-Dokumentation vorgeschlagen ist ...

    
RB. 08.08.2012 10:53
quelle
4

Beachten Sie auch: Wenn Sie nichts in die Datei schreiben wollen, können Sie die "Verwendung" auf zwei Arten vermeiden:

%Vor%

Im Fall (2) ist es sicher, die Verwendung zu vermeiden, da Sie nichts tun, was eine Ausnahme zwischen der Erstellung und der Entsorgung auslösen könnte.

    
Matthew Watson 08.08.2012 10:59
quelle
3

File.Create gibt einen FileStream zurück, der ein offenes Handle für diese Datei ist. Verwenden Sie stattdessen:

%Vor%     
logicnp 08.08.2012 10:53
quelle

Tags und Links