INI Files now seem to have been completely removed
by the registry, but sometimes they are a much better option. This can be becuase of
safety for the registry, and allowing the user to more easily view and change settings.
This simple wrapper class wraps up a few simple INI file functions into a reusable, drop
in class for instant INI file use. It supports the following methods/properties:
- CreateINI – Creates a new INI file
- GetFile – Returns the value specified in the arguements passed
- INIFile – Gets/Sets the current INI file path
- MakePath – A private function used to create the ini file
- WriteFile – Writes a value to the INI file
You will probably want to extend its functionality by adding more INI file functions.
Anyway, the class is based around two Win API declares: WritePrivateProfileString and
GetPrivateProfileString. Both require a bit of extra work to make them effective, but
overall they are quite simple to use. A good alternative to the Windows Registry.
To get the class working just use:
Private m_cIni As CIniFile Private Sub Form_Load() Set m_cIni = New CIniFile End Sub
Add a new class module (CIniFIle) and copy the following
code into it:
Option Explicit '// Private member that holds a reference to '// the path of our ini file Private strInI As String '// Win API Declares 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 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 Function MakePath(ByVal strDrv As String, _ ByVal strDir As String) As String '// Makes an INI file: Guarantees a sub dir Do While Right$(strDrv, 1) = "" strDrv = Left$(strDrv, Len(strDrv) - 1) Loop Do While Left$(strDir, 1) = "" strDir = Mid$(strDir, 2) Loop '// Return the path MakePath = strDrv & "" & strDir End Function Public Sub CreateIni(strDrv As String, strDir As String) '// Make a new ini file strInI = MakePath(strDrv, strDir) End Sub Public Sub WriteFile(strSection As String, _ strKey As String, _ strValue As String) '// Write to strINI WritePrivateProfileString strSection, _ strKey, strValue, strInI End Sub Public Function GetFile(strSection As String, _ strKey As String) As String Dim strTmp As String Dim lngRet As String strTmp = String$(100, 0) lngRet = GetPrivateProfileString(strSection, _ strKey, "", strTmp, _ Len(strTmp), strInI) GetFile = strTmp End Function Public Property Let INIFile(ByVal New_IniPath As String) '// Sets the new ini path strInI = New_IniPath End Property Public Property Get INIFile() As String '// Returns the current ini path INIFile = strInI End Property