문제

내 ASP.NET 응용 프로그램에는 이미지 자르기 및 크기 조정 기능이 있습니다. 이를 위해서는 업로드 된 임시 이미지를 삭제해야합니다. 모든 것이 잘 작동하지만 80px보다 큰 이미지를 80px보다 삭제하려고하면 모든 리소스를 공개하더라도 "파일이 다른 프로세스로 잠겨 있습니다 ..."오류가 발생합니다.

스 니펫은 다음과 같습니다.

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);
도움이 되었습니까?

해결책

IMG 변수에 할당 된 첫 번째 이미지 인스턴스를 처리하지 않는다고 생각합니다.

대신 이것을 고려하십시오.

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);

다른 팁

이런 식으로 이미지를 만들면 잠겨 있지 않습니다.

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
                }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top