ASP.NET MVC-Dateien löschen?
Bekomme ich diesen Fehler
The process cannot access the file '..\Images\Temp\6574_1212665562989_1419270107_30610848_6661938_n.jpg' because it is being used by another process.
Wenn ich so probiert:
try
{
var file = Request.Files["FileProfilePicture"];
file.SaveAs(Server.MapPath("~/Images/Temp/" + file.FileName));
Bitmap imageOrj = new Bitmap(System.Web.HttpContext.Current.Server.MapPath("~/Images/Temp/" + file.FileName));
Image imageBig = ResizeImage.Resize(imageOrj, 100, 100);
imageBig.Save(System.Web.HttpContext.Current.Server.MapPath("~/Images/ProfilePicBig/" + file.FileName));
Image imageSmall = ResizeImage.Resize(imageOrj, 50, 50);
imageSmall.Save(System.Web.HttpContext.Current.Server.MapPath("~/Images/ProfilePicSmall/" + file.FileName));
string[] files = System.IO.Directory.GetFiles(Server.MapPath("~/Images/Temp/"));
foreach (string pathFile in files)
{
System.IO.File.Delete(pathFile);
}
return RedirectToAction("Index", "Author");
}
catch (Exception e)
{
ModelState.AddModelError("", "Kullanıcı bilgileri güncellenirken bir hata oluştu. Lütfen daha sonra tekrar deneyin." + e.Message);
}
Wie ich es beheben kann. Oder noch eine bessere Möglichkeit, um Bilder wie ein temp. Sollte ich die Dateien in einem temp-Ordner?
Dank
InformationsquelleAutor AliRıza Adıyahşi | 2012-04-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hast du sicher, dass Sie nicht die Datei im temp-öffnen irgendwo anders?
Dieser Fehler tritt auch auf, wenn Sie hatte einen Fehler in einer früheren Ausführung und die Datei wurde nicht geschlossen. Sie können versuchen, eine andere Datei-name in diesem Fall, oder löschen Sie einfach die nicht geschlossene Datei von der OS-Seite.
Ich hoffe das hilft...
Sonst, ich in der Regel verwenden Sie eine ähnliche Art zu tun, temp-Dateien...
Edit: Durch die Kommentare, scheint es, dass die Auflösung für das Problem oben wurde die folgende: Wann immer behandelt werden, in einen try-catch-block, der die Datei-Objekte Umständen nicht geschlossen nach unten, wenn es nicht behandelt wird in den catch Knoten.
In diesem konkreten Fall die
imageOrj
Objekt das problem verursacht hat, so ist es empfohlen, um eineimageOrj.Dispose()
nach der Bitmap-Bearbeitung abgeschlossen ist.Ich bin nicht sicher, ob der FileStream().Close() zu lösen wäre, ist es nicht ein FileStream, aber ein HttpPostedFileBase. Aber die SaveAs-Methode, sollten Sie nicht öffnen Sie die Datei, die gerade buchstäblich erstellt eine Kopie (oder spült die HttpPostedFile in es), so muss es sein, ein Bitmap-Objekt, das wirft ein wobble... das heißt, dass das der eine hält die Datei geöffnet, also ich denke, man kann eine imageOrj.Dispose() auf, nachdem Sie fertig mit der Bitmap...
Ich denke, der link, in der Jakub auf die post ist ein gutes Beispiel, also wenn das Ihr problem löst, können Sie akzeptieren, dass...
imageOrj.Dispose() ist die Antwort. Wenn Sie schreiben als Antwort. Ich wil Akzeptieren verkaufen. Dank
Ich m warten Sie Bearbeiten Ihre Antwort.
InformationsquelleAutor army
Brauchen Sie nicht zum speichern der temp-Datei. Sie können die bitmap in den Speicher und füllt Sie mit den request stream. Es gibt keine Notwendigkeit, es zu speichern auf die Festplatte.
forums.asp.net/t/1576697.aspx/1
InformationsquelleAutor Jakub Konecki
Scheinen Sie zu löschen, mehr Dateien als die, die Sie erstellen, in die Löschung Schleife. Sie versucht, zu löschen jede einzelne Datei unter ~/Bilder/Temp/, dies könnte zu Konflikten (dh Daten Rennen zwischen verschiedenen Anforderungen). Löschen Sie nur die Dateien, die Sie gerade erstellt haben.
wie ist das nicht wichtig? stellen Sie sich zwei gleichzeitige Anforderungen, die sowohl das erstellen differente Dateien, von der Anfrage fertig wird früher und versuchen, die Dateien zu löschen, die bereits von der ersten Anfrage. Es ist eindeutig, Daten Rennen hier auf das temp-Verzeichnis 🙂
InformationsquelleAutor nakhli