• 응답코드
    • 요청에 대한 상태 : HTTP의 상태코드
    • 에러에 대한 정보 : 에러코드
      • 위 200 코드 이외의 에러에 대한 정보를 리턴
      • 코드와 (상세)메시지로 구현
        • (내부적으로 설정된)상세 코드 추가 출력
      • 에러에 대한 내부 코드 스펙이 정해져 있어야 함
        • 다른 서비스들(카카오, 네이버 등등)을 참고하여 예외상황을 미리 추가하여 구분해 놓는것이 좋음

 

'개발 > Server-BackEnd' 카테고리의 다른 글

OpenAPI - 설계  (0) 2021.02.07
[asp.Net core]컨테이너 수명 옵션  (0) 2021.02.07
VS2019-Docker-SwaggerUI 경로 문제 바로 잡아주기  (0) 2021.02.04
알람 봇  (0) 2021.01.11
API - Status  (0) 2020.12.28

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

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


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


예를 들어서,

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

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 하나만으로 처리하는것이 오버헤드를 줄일 수 있는 나은 방법이 아닐까.


string strTempPath = Path.GetTempPath();


이거 쓰세요......

돌겠눼.......


.........................................................................................................................

사용자 계정 폴더 하위의 temp에 직접 임시파일을 기록할 일이 있다.

이 폴더는 윈도가 관리하는 폴더라 나중에 디스크 정리 때 같이 정리할 수 있으며,

윈도가 다중 사용자 계정일 상태에는 단일 사용자마다 temp가 따로 주어지므로 보안(?)이나 관리측면에서 용이한 면이 있다.


C#에서는 전역 클래스로 Environment클래스가 제공되며 이 클래스를 통해 실행되는 시스템의 OS관련 정보, 실행 프로그램에 대한 위치 등에 대한 관련 정보, 그리고 윈도가 제공하는 시스템 디렉토리등에 대한 정보들을 제공하는데 


보통 C:\Documents and Settings\{USERNAME}\ApplicationData 경로는 Environment.SpecialFolder의 열거자중에 골라서 리턴받을 수 있으며 다양하게 제공하기도 한다.


하지만  정작 {USERNAME}\Local Settings\Temp 의 경로, 즉 Temp 폴더는 열거자에서 찾아볼 수 없다.

그러나 다른 방법으로 Temp경로를 얻을 수 있는데


바로

Environment.GetEnvironmentVariable("temp");

을 통해 얻을 수 있다.

(이걸 그대로 출력하면 C:\Document~1\ ~~" 이런식으로 Dos에서의 출력처럼 8.3자 제한에 짤려서 출력이 된다(시샵 Console용으로 출력시. 그래서 아래를 참고)


위 메소드를 통해 

"C:\Documents and Settings\{USERNAME}\Local Settings\Temp"까지 얻을 수 있고 이걸 그대로 사용하면 파일로 인식되는 모호성이 발생하기 때문에 나는  


Path.GetFullPath(Environment.GetEnvironmentVariable("temp") + "\\");


로 static선언을 통해 리턴받아 사용한다.


그렇게 되면 정확하게 

"C:\Documents and Settings\{USERNAME}\Local Settings\Temp\"

이 출력되며, 그 뒤에 파일이나 하위 디렉토리를 추가하여 다른 작업을 할 수 있다.


Temp 의미상 임시로 즉각적인 임시파일의 기록이나 폴더를 사용하기 위한 용도로만 사용해야 맞는것이며 부팅하거나 다른 작업시 운영체제가 임의로 정리 가능한 권리를 가지는 폴더이기 때문에 파일의 일정기간의 저장을 위한 용도로는 사용하지 않는것이 좋다.


특정 프로그램에서 일정 기간의 저장, 예로 config.xml같은 실행시에만 초기에 프로그램의 환경설정 변수를 잡아주는 용도로 사용하는 파일을 저장할때는 C:\Documents and Settings\{USERNAME}\ApplicationData 같은 ApplicationData의 하위폴더에 대표하위폴더를 생성해서 그 안에서 작업하는것이 일반적이다.


한글 MSDN : http://msdn.microsoft.com/ko-kr/library/system.environment(v=vs.80).aspx (System.Environment 클래스) (.net v2.0)



+ Recent posts