-1

imagePathプロセスを終了するには何をする必要がありますか?

エラー:

別のプロセスで使用されているため、プロセスはファイル'C:\ Users \ Rafal\7074edcf-8849-4ea7-a87d-e2e8b5890f3f.jpg'にアクセスできません。

ここに画像の説明を入力してください

public WrappedJsonResult2 UploadImageSmall(HttpPostedFileWrapper imageFile2)
        {

            if (imageFile2 == null || imageFile2.ContentLength == 0)
            {
                return new WrappedJsonResult2
                {
                    Data = new
                    {
                        IsValid = false,
                        Message = "Nie dodano zdjęcia",
                        ImagePath = string.Empty
                    }
                };
            }

ここに最初の画像のfileNameとimagePathがあります

            var fileName = String.Format("{0}.jpg", Guid.NewGuid().ToString());
            var imagePath = Path.Combine(Server.MapPath(Url.Content("~/Content/UserImages")), fileName);

ここに2番目の画像のfileNameとimagePathがあります

            var fileNameZmniejszony = String.Format("{0}.jpg", Guid.NewGuid().ToString());
            var imagePathZmniejszony = Path.Combine(Server.MapPath(Url.Content("~/Content/UserImages")), fileNameZmniejszony);

JSONから画像を保存します

            imageFile2.SaveAs(imagePath);

imageFile2の方向から写真を撮ります

            var image = Image.FromFile(imagePath);

新しい画像を拡大縮小し、2番目の画像として保存します

            var newImage = ScaleImage(image, 300, 400);
            newImage.Save(imagePathZmniejszony);

ここでは、ディレクトリの最初の画像を含むファイルを削除したいと思います

            if (System.IO.File.Exists(imagePath))
            {
                System.IO.File.Delete(imagePath);
            }

            var model = new StronaGlowna();
            if (!TryUpdateModel(model))
            {
            }
            model.MaleZdjecie = String.Format("~/Content/UserImages/{0}", fileNameZmniejszony);

            return new WrappedJsonResult2
            {
                Data = new
                {
                    IsValid = true,
                    Message = string.Empty,
                    ImagePath = Url.Content(String.Format("~/Content/UserImages/{0}", fileNameZmniejszony))
                }
            };
        }

このテイクプロセスが原因でプロセスに問題が発生する理由(HttpPostedFileWrapper imageFile2)

そしてdispose()はこの問題では機能しません。

4

3 に答える 3

7

画像を削除する前に、画像を削除する必要がありDispose()ます。これで、画像ファイルが開かれました。

これはに文書化されていますImage.FromFile

画像が破棄されるまで、ファイルはロックされたままになります。

コードでこれを処理する1つの方法は、次のように記述します。

using(var image = Image.FromFile(imagePath))
{
   using(var newImage = ScaleImage(image, 300, 400))
   {
       newImage.Save(imagePathZmniejszony);
   }
}

これにより、両方のImageインスタンスが適切に破棄されます。

于 2013-03-26T15:20:09.673 に答える
2

image.Dispose()削除する前に使用してみてください。

于 2013-03-26T15:20:02.657 に答える
2

画像変数を破棄する必要があります。まだファイルを使用しています。

image.Dispose();削除を行う前に呼び出します。

画像変数をコピーするときに、usingステートメントで画像変数をラップすることもできます。これはより良い習慣です。

using (var image = Image.FromFile(imagePath))
{
    var newImage = ScaleImage(image, 300, 400);
    newImage.Save(imagePathZmniejszony);
}

上記で問題が解決します。使い捨てオブジェクトは常にUsingステートメントでラップしてください。これにより、管理されていないすべてのリソースがメモリからクリアされます。

于 2013-03-26T15:20:35.797 に答える