Nov 20 2002 10:21 Written by www.anygate.com
1. 응용 프로그램의 INI 파일 : 표준 INI (standard INI)
Win 95' 이래 INI 파일의 사용은 윈도우즈 레지스트리로 대체되었지만
탐색기로 윈도우즈 디렉토리를 열어보면 *.ini 파일을 많이 볼 수 있는데
그것은 아직도 INI 파일이 사용되고 있다는 얘기다.
윈도우즈 디렉토리에 있는 INI 파일들의 이름은 대개 응용 프로그램의 이름과 같다.
예를들어 넷스케이프를 사용하고 있다면 그곳에서 netscape.ini 파일을 볼 수 있을 것이다.
응용 프로그램의 INI 파일은 보통 윈도우즈 디렉토리에 만들어지며
그 응용 프로그램의 실행에 관련된 정보를 기록하여 두었다가 실행시에 사용하게 된다.
간단한 예를 든다면 툴바의 위치나 응용 프로그램이 최근에 실행될 때의
창의 크기나 상태 그리고 최근에 열었던 파일의 목록등을 기록하는 것이다.
MFC를 사용하여 만든 응용 프로그램에서는 CWinApp 클래스가
응용 프로그램의 INI 파일을 관리하는 몇 개의 멤버함수들을 제공해 주는데
특별한 지시가 없는 한 응용 프로그램의 INI 파일을 대상으로 정보를 기록하거나 읽어오게 되며
응용 프로그램이 처음 실행될 때 윈도우즈 디렉토리에 만들어지게 된다.
2. 읽고 쓰는 함수들
앞서 말했듯이 MFC의 CWinApp 클래스엔 다음과 같은 멤버함수들이 있다.
사용법은 간단하다. 모두 3개씩의 인자를 가지고 있는데
처음 두개중 lpszSection은 섹션명을, lpszEntry는 해당 섹션의 키를 지정한다.
세번째 인자는 읽는 함수들의 경우 INI 파일이 없거나 있더라도
지정된 섹션이나 키가 없을경우 기록된 값 대신 사용할 디폴트 값이며
쓰는 함수들의 경우엔 해당 키에 기록할 값을 넣어주면 된다.
함수들의 리턴값은 쓰는 함수들의 경우 쓰기가 성공하면 '0'이 아닌 값,
실패하면 '0'이 되고 읽는 함수들의 경우 읽어낸 또는
디폴트로 지정한(읽기를 실패한 경우) 정수 또는 문자열이다.
※ 참고:
값을 기록하기 위해 지정한 섹션이나 키가 존재하지 않는다면 새로 만들어진다.
만약 이미 만들어진 섹션이나 키를 지우려면 WriteProfileString() 함수의
세번째 인자로 NULL을 지정하면 된다. 그리고 섹션이나 키 네임은 대소문자를 구분하지 않는다.
3. 지정된 INI 파일 바꾸기
CWinApp 클래스의 데이터 멤버 중엔 m_pszProfileName이 있는데
바로 이 변수에 응용 프로그램이 사용할 INI 파일명이 담겨 있다.
만약 응용 프로그램이 사용할 INI 파일의 경로나 이름을 바꾸고 싶다면
이 변수에 원하는 경로와 파일명을 넣어주면 되는데 그 전에 해야할 일이 있다.
m_pszProfileName은 위에 보인대로 char형 포인터 변수이다.
응용 프로그램이 시작되고 CWinApp 가 생성되면 이 변수가 가리키는 문자열을 저장할 메모리는
힙 상에 동적으로 할당된다. 따라서 새로 문자열을 지정하려면 먼저 이전에 할당된 메모리를 해제하고
다시 메모리를 할당해야 한다.
다음이 그 과정이다.
첫번째 메모리 할당은 CWinApp 클래스의 InitInstance()가 실행되기 전에 이루어지므로
다시 지정하기 위한 위의 두 줄은 InitInstance() 멤버에 넣어주면 될 것이다.
이 때 주의할 점은 만약 InitInstance()에 응용 프로그램의 INI 파일을 사용하는 코드가 있다면
그 코드의 앞에서 재지정이 이루어져야 한다는 것이다.
그렇지 않을 경우엔 당연히 INI 파일에서 쓰거나 읽은 데이터가 엉뚱한 것이 될 수도 있다.
예를든다면, InitInstance() 함수엔 응용 프로그램이 최근에 열었던 파일목록을 읽어오기 위해
CWinApp 클래스의 LoadStdProfileSettings() 멤버를 둘 수 있는데
이 함수가 호출된 뒤에 응용 프로그램의 INI 파일을 바꾸어버리면
응용 프로그램을 종료할 때 다시 기록되는 최근 파일목록은 어떻게 변경되든 상관없이
다시 프로그램이 실행될 때 읽혀지지 않을 것이다.
1. 응용 프로그램의 INI 파일 : 표준 INI (standard INI)
Win 95' 이래 INI 파일의 사용은 윈도우즈 레지스트리로 대체되었지만
탐색기로 윈도우즈 디렉토리를 열어보면 *.ini 파일을 많이 볼 수 있는데
그것은 아직도 INI 파일이 사용되고 있다는 얘기다.
윈도우즈 디렉토리에 있는 INI 파일들의 이름은 대개 응용 프로그램의 이름과 같다.
예를들어 넷스케이프를 사용하고 있다면 그곳에서 netscape.ini 파일을 볼 수 있을 것이다.
응용 프로그램의 INI 파일은 보통 윈도우즈 디렉토리에 만들어지며
그 응용 프로그램의 실행에 관련된 정보를 기록하여 두었다가 실행시에 사용하게 된다.
간단한 예를 든다면 툴바의 위치나 응용 프로그램이 최근에 실행될 때의
창의 크기나 상태 그리고 최근에 열었던 파일의 목록등을 기록하는 것이다.
MFC를 사용하여 만든 응용 프로그램에서는 CWinApp 클래스가
응용 프로그램의 INI 파일을 관리하는 몇 개의 멤버함수들을 제공해 주는데
특별한 지시가 없는 한 응용 프로그램의 INI 파일을 대상으로 정보를 기록하거나 읽어오게 되며
응용 프로그램이 처음 실행될 때 윈도우즈 디렉토리에 만들어지게 된다.
2. 읽고 쓰는 함수들
앞서 말했듯이 MFC의 CWinApp 클래스엔 다음과 같은 멤버함수들이 있다.
사용법은 간단하다. 모두 3개씩의 인자를 가지고 있는데
처음 두개중 lpszSection은 섹션명을, lpszEntry는 해당 섹션의 키를 지정한다.
세번째 인자는 읽는 함수들의 경우 INI 파일이 없거나 있더라도
지정된 섹션이나 키가 없을경우 기록된 값 대신 사용할 디폴트 값이며
쓰는 함수들의 경우엔 해당 키에 기록할 값을 넣어주면 된다.
함수들의 리턴값은 쓰는 함수들의 경우 쓰기가 성공하면 '0'이 아닌 값,
실패하면 '0'이 되고 읽는 함수들의 경우 읽어낸 또는
디폴트로 지정한(읽기를 실패한 경우) 정수 또는 문자열이다.
※ 참고:
값을 기록하기 위해 지정한 섹션이나 키가 존재하지 않는다면 새로 만들어진다.
만약 이미 만들어진 섹션이나 키를 지우려면 WriteProfileString() 함수의
세번째 인자로 NULL을 지정하면 된다. 그리고 섹션이나 키 네임은 대소문자를 구분하지 않는다.
3. 지정된 INI 파일 바꾸기
CWinApp 클래스의 데이터 멤버 중엔 m_pszProfileName이 있는데
바로 이 변수에 응용 프로그램이 사용할 INI 파일명이 담겨 있다.
만약 응용 프로그램이 사용할 INI 파일의 경로나 이름을 바꾸고 싶다면
이 변수에 원하는 경로와 파일명을 넣어주면 되는데 그 전에 해야할 일이 있다.
m_pszProfileName은 위에 보인대로 char형 포인터 변수이다.
응용 프로그램이 시작되고 CWinApp 가 생성되면 이 변수가 가리키는 문자열을 저장할 메모리는
힙 상에 동적으로 할당된다. 따라서 새로 문자열을 지정하려면 먼저 이전에 할당된 메모리를 해제하고
다시 메모리를 할당해야 한다.
다음이 그 과정이다.
첫번째 메모리 할당은 CWinApp 클래스의 InitInstance()가 실행되기 전에 이루어지므로
다시 지정하기 위한 위의 두 줄은 InitInstance() 멤버에 넣어주면 될 것이다.
이 때 주의할 점은 만약 InitInstance()에 응용 프로그램의 INI 파일을 사용하는 코드가 있다면
그 코드의 앞에서 재지정이 이루어져야 한다는 것이다.
그렇지 않을 경우엔 당연히 INI 파일에서 쓰거나 읽은 데이터가 엉뚱한 것이 될 수도 있다.
예를든다면, InitInstance() 함수엔 응용 프로그램이 최근에 열었던 파일목록을 읽어오기 위해
CWinApp 클래스의 LoadStdProfileSettings() 멤버를 둘 수 있는데
이 함수가 호출된 뒤에 응용 프로그램의 INI 파일을 바꾸어버리면
응용 프로그램을 종료할 때 다시 기록되는 최근 파일목록은 어떻게 변경되든 상관없이
다시 프로그램이 실행될 때 읽혀지지 않을 것이다.
"MFC" 카테고리의 다른 글
- CFile 클래스를 이용한 파일 I/O (0)2007/05/15
- WaitForSingleObject() 에 의한 Thread 동기화 (0)2007/05/15
- 응용 프로그램의 INI 파일 바꾸기 (0)2007/05/15
- Thread (쓰레드) 란 ? (3)2007/05/15
- Using User-Interface Threads (0)2007/04/29

수안이의 컴퓨터 연구실



Leave your greetings.