2015년 2월 16일 월요일

VB6.0 에서 Config.ini 파일 컨트롤 하기.

프로그래밍할때 환경 설정 파일을 다루는 방법은 여러가지가 있지만, 역기 그 중에 가장 간단한 것은 ini 파일을 만들어서 텍스트로 관리하는 것이다.

VB 는 간단하게 API 를 제공하는데...


그냥 간단히, "WritePrivateProfileString Lib kernel32" 를 참조하고.
WritePrivateProfileString() 로 쓰면된다.

저렇게 만들고 버튼을 클릭해 실행해 보면...


위에서 지정한 AppName 인 "Config" 가 [Config] 라는 구분자로 설정값을 등록해 놓았음을 볼 수있다.

만약 AppName 인 "Config" 가 아닌 다른 값을 지정하면 같은 파일 안에서 서로다른 설정값 그룹을 만들수도 있다.


이렇게 괄호 [] 로 구분된 서로 다른 설정값 그룹을 생성해 관리 할 수도 있다.
이 말은 같은 ini 파일에 있다고 해도 설정값 그룹이 다른면 다른 그룹의 값은 읽을 수 없다는 얘기 이므로 설정 값을 읽거나 쓸때 지정된 그룹에 주의 해야 한다.

그리고 위의 예제보다는 일반적으로 공통 모듈을 만들어 쓰는 것이 일반적이다.

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _
        (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, _
        ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _
        (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, _
        ByVal lpFileName As String) As Long

Public Function gINIRead(sSession As String, sKey As String, sINIFile As String, Optional ByVal sDefault As String = "") As String
    Dim lngRet      As Long
    Dim strValue    As String * 1024

    lngRet = GetPrivateProfileString(sSession, sKey, sDefault, strValue, 1024, App.path & "\" & sINIFile)
    gINIRead = Left(strValue, InStr(strValue, Chr(0)) - 1)

End Function

Public Function gINIWrite(sSession As String, sKey As String, sData As String, sFileDir As String, sINIFile As String) As Boolean
    Dim lngRet As Long
    Dim sFilePath As String
    
    If sFileDir = "" Then
        sFilePath = App.path & "\" & sINIFile
    Else
        sFilePath = sFileDir & "\" & sINIFile
    End If
    
    lngRet = WritePrivateProfileString(sSession, sKey, sData, sFilePath)
    
    If lngRet = 0 Then
        gINIWrite = True
    Else
        gINIWrite = False
    End If
End Function


이렇게 모듈을 만들어 놓으면...

    strPort = gINIRead(AppName, "Port", "Config.INI", "0")

    Call gINIWrite("TIME", AppName, sTime, sDir, "Config.INI")

이렇게 간략하게 읽고 쓸수가 있다.