Image.Save 호출 중 ExternalException 발생시 확인사항

  회사일을 하다가 Image.Save 메서드를 호출했는데 ExternalException이 발생해서 처음엔 using문 사용으로 dispose된 객체를 호출해서 그랬나 싶어 확인했지만 코드가 아래와 같이 돼 있었기에 그럴 일은 없었습니다.

using (var thumb = originalImg.Clone() as Image)
{
 //...
 thumb.Save($"{path}{filename}.jpg", ImageFormat.JPEG);

 //...
 thumb.Save($"{path}{filename}.jpg", ImageFormat.JPEG);
}


  가장 흔한 이유인 삭제된 객체에 접근하는 에러가 아니라면 대체 뭘까? 하고 고민하다가 아주 어처구니 없는 사실을 깨달았습니다.

  첫 번째 Save 호출 후 중간에 path가 변경되었고, 그 path는 존재하지 않는 경로였던 겁니다. 경로를 생성한 뒤 호출하니 System.Runtime.InteropServices.ExternalException 에러 없이 정상적으로 작동하더군요. 젠장.

using (var thumb = originalImg.Clone() as Image)
{
 //...
 thumb.Save();
 
 if (!Directory.Exists(path))
  Directory.CreateDirectory(path);
 thumb.Save($"{path}{filename}.jpg", ImageFormat.JPEG);
}


  허허허허... 뭐 이런 어처구니 없는 경우가... 저와 같은 실수를 하는 분이 많진 않을 거라 봅니다만 혹시라도 저처럼 자신의 머리를 과신해서 가까운 이유를 놔두고 멀리서 원인을 찾고 계신 분들이 이 글을 보시고 도움이 되길 바라며 적어봤습니다. 즐코딩하세요.

댓글

이 블로그의 인기 게시물

C# 남아도는 메모리에도 불구하고 OutOfMemoryException이 발생한다면?

USB를 뒤는 괜찮은데 앞에 꽂으면 인식이 힘들다?

MySQL 데이터 타입과 Java 데이터 타입 비교/매칭