만일 이미지를 어느 패널에 출력한다고 할때나,

음악파일을 출력하고자 할때,


그 파일들이 어느 폴더에 있는데 여러 종류의 컨텐츠들이 섞여있는 폴더일때는 가려서 음악파일만 출력한다던지, 이미지 파일만 출력한다던지 해야한다.


예를 들어서,

내 그림 폴더에 있는 이미지 파일들만 불러서 출력하려고 하는데, 

string strPicPath = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);

로 내 그림 폴더의 경로를 받아서

DirectoryInfo asd = new DirectoryInfo(strPicPath);

FileInfo[] arrFiles = asd.GetFiles();

m_strArrjpgPath = new string[arrFiles.Length];

int nCount = 0;

foreach(FileInfo File in arrFiles)

{

    m_strArrjpgPath[nCount++] = File.FullName;

}

이렇게 작성 한 후

윈폼.m_pnlMainBase.BackgroundImage = Image.FromFile(m_strArrjpgPath[0]);

이렇게 하면 m_strArrjpgPath[0]에는 어떤 파일이 들어가는지 아는가?


바로 "DeskTop.ini". 윈도 탐색기에서 따로 설정을 하지 않은 이상 숨김파일이라 보이지도 않을, 폴더 설정 파일이 불려지게 된다.

저렇게 바로 Image.FromFile에 경로로 들어가면 Exception이 발생하며 이미지 파일이 아닌 일반 텍스트 파일임에도 불구하고 로드를 실행하며 OutOfMemory Exception이 발생하는 예상과는 다른 예외를 뱉어낸다.


어찌됐든, 

1. 해결방법 첫번째는 위의 상황에서 Exception이 발생하니 catch로 상황을 잡아주면 되는거고(안잡아주면 에러발생으로 팝업 경고뜸)

2. 아님 try~catch로 꼭 처리 안하더라도 검증된 이미지 파일만 넘겨주면 되는것이므로 컨텐츠의 헤더를 분석하여 이미지파일인지를 확인 후 넘겨주는 방식이 있다. 

하지만 넘겨줄때마다 파일을 분석해야하는 오버헤드가 생길 수 있고, 또한 이미지 파일이더라도 이미지 출력이 안될수 있는 정말 어이없는 예외상황을 처리해야하는 try~catch가 필요하다면 결국은 try~catch 하나만으로 처리하는것이 오버헤드를 줄일 수 있는 나은 방법이 아닐까.


+ Recent posts