setlocale 사용법

프로그래밍/c++ 2013. 1. 28. 12:04

c++에서 ifstream이나 ofstream으로 파일을 열고 생성할 때, 경로명 또는 파일명에 한글이 포함되면 파일 입출력이 동작하지 않는다. 경험이 없다면 찾기 힘든 문제이다.


해결법은 setlocale(LC_ALL, "")을 호출해 주면 된다. 파일 입출력 루틴 앞에 해 주어도 되고 프로그램 시작 부분에 해도 되고 아무 곳에서나 한번만 호출해 주면 된다.


setlocale(LC_ALL, "Korean")을 해 주어도 동작하지만 컴퓨터의 시스템 지역 설정을 따르게 하는 setlocale(LC_ALL, "")를 사용하는게 좋을 것 같다. 한글을 사용하는 사람들은 지역설정(locale)을 한글로 해 놓았을 테니까 ^^


일시적으로만 locale을 바꾸고 싶다면 다음과 같이 처리한다.


// 현재 locale을 저장

char *old_locale_tmp = setlocale(LC_ALL, NULL); // 임시 locale 문자열 주소 반환

char *old_locale_saved = strdup(old_locale_tmp); // 반환받은 old locale 문자열 주소가 이후 setlocale 호출로 변경되지 않도록 별도로 메모리를 할당받아서 저장


// locale을 변경하고 필요한 작업을 수행

setlocale (LC_ALL, new_locale);

...


// locale을 복구

setlocale(LC_ALL, old_locale_saved);

free(old_locale_saved);


by 다크 프로그래머