Frage

Meine ASP.NET-Anwendung hat ein Bild beschneiden und Ändern der Größe Funktionen. Dies erfordert, dass das hochgeladene Bild vorübergehend gelöscht. Alles funktioniert gut, aber wenn ich versuche, ein Bild größer als 80px von 80px ich eine „Datei wird von einem anderen Prozess gesperrt ...“ erhalten löschen Fehler, obwohl ich alle Ressourcen freigegeben habe.

Hier ist ein Ausschnitt:

System.Drawing.Image tempimg = System.Drawing.Image.FromFile(temppath);
System.Drawing.Image img = (System.Drawing.Image) tempimg.Clone(); //advice from another forum
tempimg.Dispose();

img = resizeImage(img, 200, 200); //delete only works if it's 80, 80
img.Save(newpath);
img.Dispose();

File.Delete(temppath);
War es hilfreich?

Lösung

Ich glaube, Sie sind nicht die erste Bild Instanz mit dem img Variablen zugewiesen entsorgen.

Betrachten Sie stattdessen:

System.Drawing.Image tempimg = System.Drawing.Image.FromFile(temppath);
System.Drawing.Image img = (System.Drawing.Image) tempimg.Clone();
tempimg.Dispose();

System.Drawing.Image img2 = resizeImage(img, 200, 200);
img2.Save(newpath);
img2.Dispose();
img.Dispose();

File.Delete(temppath);

Andere Tipps

Wenn Sie das Bild auf diese Weise erstellen, wird es nicht gesperrt werden:

using (FileStream fs = new FileStream(info.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    byte[] data = new byte[fs.Length];
                    int read = fs.Read(data, 0, (int)fs.Length);
                    MemoryStream ms = new MemoryStream(data, false);
                    return Image.FromStream(ms, false, false); // prevent GDI from holding image file open
                }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top