Ich wähle die Datei aus openfiledialoge und zeige sie in der Bildbox und ihren Namen in der Textbox an, wenn ich auf delete
button klicke Ich erhalte die Ausnahme The process cannot access the file because it is being used by another process.
Ich suchte viel nach dieser Ausnahme, um aufgelöst zu werden, aber ich schlug keine von ihnen vor, als ich versuchte, Datei mit dem Bildnamen zu schließen, der im Textfeld ist, d. H. Die Datei, die ich in picturebox anzeige; Mit IsFileLocked
Methode schließt und löscht es alle Dateien eines bestimmten Verzeichnispfads, aber wie kann ich die einzige Datei löschen, die in der Bildbox angezeigt wird, wo ich falsch liege
Vielen Dank im Voraus für jede Hilfe
Die (bisher) akzeptierte Antwort auf diese Frage ist sehr schlecht. Wenn Sie die Dokumentation zu System.Drawing.Bitmap
lesen, insbesondere für die Überladung, die eine Bitmap erzeugt eine Datei finden Sie:
Die Datei bleibt gesperrt, bis die Bitmap entfernt wird.
In Ihrem Code erstellen Sie das Bitmap und speichern es in einer lokalen Variablen, aber Sie haben es nie erledigt, wenn Sie fertig sind. Dies bedeutet, dass Ihr Bildobjekt den Gültigkeitsbereich verlassen hat, seine Sperre für die zu löschende Bilddatei jedoch nicht aufgehoben wurde. Für alle Objekte, die IDisposable
(wie Bitmap
) implementieren, müssen Sie diese selbst entsorgen. Siehe diese Frage für Beispiel (oder suche nach anderen - das ist ein sehr wichtiges Konzept!).
Um das Problem richtig zu beheben, müssen Sie das Bild einfach entfernen, wenn Sie damit fertig sind:
%Vor% Bitte nehmen Sie nicht den Rat in der Antwort unten - Sie sollten fast nie GC.Collect
aufrufen müssen und wenn Sie es tun müssen, um Dinge zum Laufen zu bringen, sollte es ein sehr starkes Signal sein, dass Sie etwas anderes falsch machen.
Wenn Sie nur die one -Datei (die angezeigte Bitmap) löschen möchten, ist Ihr Löschcode falsch und löscht auch alle Dateien im Verzeichnis (dies ist nur die Wiederholung von Adels Punkt ). Anstatt ein globales OpenFileDialog
-Objekt am Leben zu erhalten, einfach um den Dateinamen zu speichern, würde ich vorschlagen, das zu entfernen und nur die Dateiinformationen zu speichern:
Dann können Sie im zweiten Button-Handler einfach die Datei löschen, an der Sie interessiert sind.
%Vor%Ihr button2_Click-Ereignishandler durchläuft alle Dateien in Ihrem Verzeichnis & amp; löscht die Löschvorgänge.
Sie müssen Ihren Code wie folgt ändern:
%Vor%Wenn Sie GetThumailImage verwenden, müssen Sie die Breite und Höhe angeben, die statisch ist. Verwenden Sie stattdessen die Load-Methode. zB: pictureBox1.Load (Pfad zum Bild); Dadurch können Sie das Bild oder den Ordner vor dem Schließen der App problemlos löschen. keine anderen Methoden müssen erstellt werden. hoffe das hilft