Ich habe viele Probleme wie diese gesehen, die gelöst wurden, und das Problem lag hauptsächlich daran, dass Streams nicht ordnungsgemäß entsorgt wurden.
Mein Problem ist etwas anders, hier folgt ein Codeausschnitt
%Vor% Dabei ist Images
eine benutzerdefinierte Struktur und item.File
die Rohdaten, Byte [].
Mein Problem ist, dass in der Zeile, in der WriteAllBytes
aufgerufen wird, eine Ausnahme ausgelöst wird. Die Nachricht lautet:
The process cannot access the file because it is being used by another process
Wieder habe ich keine Ahnung, wie ich den Prozess irgendwie machen soll.
Da File.Create
den Stream zurückgibt, würde ich es richtig entsorgen:
oder Sie können den Stream verwenden, um direkt in die Datei zu schreiben:
%Vor% oder, wahrscheinlich am einfachsten, verwenden Sie File.WriteAllBytes
allein :
Erstellt eine neue Datei, schreibt das angegebene Byte-Array in die Datei und schließt dann die Datei. Wenn die Zieldatei bereits existiert, ist es das überschrieben.
Sie geben an, dass Ihr Problem nichts mit der Bereitstellung von Streams zu tun hat, überprüfen Sie jedoch diesen MSDN-Artikel:
Was gibt File.Create
zurück? Ein FileStream !!!!
Und am Ende des Tages, warum verwenden Sie File.Create
, wenn File.WriteAllBytes
eine Datei erstellt, wenn diese nicht existiert? ;)
Erstellt eine neue Datei, schreibt das angegebene Byte-Array in die Datei und schließt dann die Datei. Wenn die Zieldatei bereits existiert, ist es das überschrieben.
Überprüfen Sie es auch auf MSDN: Ссылка
Ihr Protokoll ist möglicherweise schreibgeschützt. Versuchen Sie es mit FileShare.ReadWrite.
Die create-Methode öffnet die Datei zum Schreiben und gibt ein FileStream-Objekt zurück, damit Sie arbeiten können mit. Nur weil Sie nicht darauf verweisen, bedeutet nicht , dass es nicht zurückgegeben werden muss.
%Vor% Die File.WriteAllBytes
erstellt die Datei falls nötig. Sie können juts verwenden:
Und kombinieren Sie Pfad korrekt?
Dies ist der spezifischste Weg, um das zu erreichen, was Sie versuchen zu tun:
%Vor%Sie müssen auch Ihre Logik zum Erstellen des Pfades korrigieren, was ich in meinem obigen Beispiel getan habe. Du hast den newPath immer wieder verkettet.
Erzwingen, dass der Garbage Collector bereinigt wird.
GC.Collect ();
Tags und Links c# asp.net file-in-use