C # File Exception: kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird

7

Ich versuche, eine Datei aus dem Internet herunterzuladen und lokal zu speichern, aber ich bekomme eine Ausnahme:

  

C # Der Prozess kann nicht auf die Datei zugreifen   'blah', weil es von benutzt wird   ein anderer Prozess.

Das ist mein Code:

%Vor%

Ich habe zahlreiche andere Fragen mit der gleichen Ausnahme gesehen, aber keiner von ihnen scheint hier zu gelten. Irgendwelche Hilfe?

Aktualisierung:
Danke für die Antworten! Entfernen der File.Create(...) repariert es!

Ein Kommentar zur Dokumentation von OpenWrite : Es ist ein wenig irreführend, die kurze Beschreibung sagt:

  

Öffnet eine existierende Datei zum Schreiben.

Die detaillierte Beschreibung sagt:

  

Wenn die Datei existiert , wird sie geöffnet für   Schreiben am Anfang. Die bestehende   Datei wird nicht abgeschnitten.

Update 2.0:
Es sieht so aus, als ob die Diskrepanz zwischen IntelliSense / F1 und der Online-Dokumentation besteht. Ich dachte, es sollte das gleiche sein, da ich F1 erlaube, sich mit dem Web zu verbinden, wenn es Dokumentation anzeigt.

    
Kiril 23.04.2010, 20:10
quelle

4 Antworten

17

File.Create gibt eine FileStream zurück, die Sie nicht schließen. Das bedeutet, dass Sie nicht in der Lage sind, einen anderen Stream zu öffnen, der in dieselbe Datei schreibt, bis der Finalizer den vorhandenen Stream geschlossen hat.

Einfach den Aufruf von File.Create loslassen - File.OpenWrite erstellt es trotzdem. Behalten Sie alternativ die FileStream zum Schreiben bei:

%Vor%

Beachten Sie, dass ich hier auch WebResponse entsorge, was Sie tun sollten, um sicherzustellen, dass die Verbindung für den Verbindungspool freigegeben wird.

    
Jon Skeet 23.04.2010, 20:13
quelle
6

sieht so aus, als ob File.Create ein offenes FileStream-Objekt zurückgibt

Ссылка

probiere

aus %Vor%

und lassen Sie die erste Datei.Create

    
house9 23.04.2010 20:14
quelle
4

Das Problem besteht darin, dass die File.Create-Methode die Datei tatsächlich öffnet und ein FileStream-Objekt zurückgibt. Es wird die Datei nicht schließen, bis das Objekt Müll gesammelt wird (was zu einer unbestimmten Zeit geschieht). Das FileStream-Objekt wird immer noch erstellt, unabhängig davon, ob Sie es verwenden oder nicht. Versuchen Sie Folgendes:

%Vor%     
Peter Ruderman 23.04.2010 20:16
quelle
3

Erstens. File.Create gibt einen Stream zurück, den Sie für den Zugriff auf die Datei verwenden sollten.

Zweitens, wenn Sie das Problem nicht lösen, finden Sie bei google who lock ein Programm, mit dem Sie bestimmen können, welcher Prozess gleichzeitig auf eine Datei zugreift.

    
AaronLS 23.04.2010 20:14
quelle

Tags und Links