"Der Prozess kann nicht auf die Datei zugreifen, weil sie von einem anderen Prozess verwendet wird" mit Images

7

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.

    
Scriptworks 11.11.2012, 20:53
quelle

7 Antworten

18

Da File.Create den Stream zurückgibt, würde ich es richtig entsorgen:

%Vor%

oder Sie können den Stream verwenden, um direkt in die Datei zu schreiben:

%Vor%

oder, wahrscheinlich am einfachsten, verwenden Sie File.WriteAllBytes allein :

%Vor%
  

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.

    
Tim Schmelter 11.11.2012, 20:58
quelle
4

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: Ссылка

    
Matías Fidemraizer 11.11.2012 20:58
quelle
1
%Vor%

Ihr Protokoll ist möglicherweise schreibgeschützt. Versuchen Sie es mit FileShare.ReadWrite.

    
Ashwin Patil 13.09.2013 11:45
quelle
1

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%     
just.another.programmer 11.11.2012 21:01
quelle
0

Die File.WriteAllBytes erstellt die Datei falls nötig. Sie können juts verwenden:

%Vor%

Und kombinieren Sie Pfad korrekt?

    
Hamlet Hakobyan 11.11.2012 21:02
quelle
0

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.

    
Lawrence Johnson 11.11.2012 23:28
quelle
-1

Erzwingen, dass der Garbage Collector bereinigt wird.

GC.Collect ();

    
NoloMokgosi 06.05.2016 10:11
quelle

Tags und Links