0

アップロードしたばかりのファイルを削除しようとすると、「別のプロセスで使用されているため、プロセスはファイルにアクセスできません」というエラーが表示されます (これは、ファイルがアップロードされてから少なくとも数秒後です。書き終わりました)。これが発生する理由はありますか?PS: 私が生成したサムネイルは問題なく削除されますが、元のサムネイルは何らかの形でロックされています。

            var FileExt = Path.GetExtension(photo.File.FileName);
            var FilePath = Path.Combine(Server.MapPath("~/App_Data/" + photo.ClientId), photo.PhotoId.ToString()) + FileExt;
            photo.File.SaveAs(FilePath);
            var ThumbFilePath = Path.Combine(Server.MapPath("~/App_Data/" + photo.ClientId),photo.PhotoId.ToString() + "_thumbnail") + FileExt;
            PhotoTools.MakeThumbnail(FilePath, ThumbFilePath, 0.15);
            return RedirectToAction("Create");

PhotoTools クラス内...

    public static void MakeThumbnail(string ImgIn, string ImgOut, double Percent)
    {
        Image img = Image.FromFile(ImgIn);
        double Width = img.Width*Percent;
        double Height = img.Height*Percent;
        MakeThumbnail(ImgIn, ImgOut, (int)Width, (int)Height);
    }

削除機能...

    public ActionResult DeleteConfirmed(int id)
    {
        Client client = db.Clients.Find(id);
        db.Clients.Remove(client);
        db.SaveChanges();
        if (Directory.Exists(Server.MapPath("~/App_Data/" + id)))
        {
            Directory.Delete(Server.MapPath("~/App_Data/") + id,true);
        }
        return RedirectToAction("Index");
    }
4

1 に答える 1

4

MakeThumbnail メソッドでDispose()Image型を呼び出していることを確認してください。それまたは using 構文を使用します。

using (Image img = Image.FromFile(ImgIn))
{
    // Your code
}
于 2013-06-10T00:21:21.807 に答える