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.
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:
Beachten Sie, dass ich hier auch WebResponse
entsorge, was Sie tun sollten, um sicherzustellen, dass die Verbindung für den Verbindungspool freigegeben wird.
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%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.