2012年8月1日 星期三

Read/Write to .ini files in vb.net

參考引用
--

The following module demonstrates how to access INI files from VB.Net. It also illustrates the use of
function overloading to allow different functionality from the same call by using different parameters:

Option Strict On
Module INIAccess

#Region "API Calls"
' standard API declarations for INI access
' changing only "As Long" to "As Int32" (As Integer would work also)
Private Declare Unicode Function WritePrivateProfileString Lib "kernel32" _
Alias "WritePrivateProfileStringW" (ByVal lpApplicationName As String, _
ByVal lpKeyName As String, ByVal lpString As String, _
ByVal lpFileName As String) As Int32

Private Declare Unicode Function GetPrivateProfileString Lib "kernel32" _
Alias "GetPrivateProfileStringW" (ByVal lpApplicationName As String, _
ByVal lpKeyName As String, ByVal lpDefault As String, _
ByVal lpReturnedString As String, ByVal nSize As Int32, _
ByVal lpFileName As String) As Int32
#End Region

Public Overloads Function INIRead(ByVal INIPath As String, _
ByVal SectionName As String, ByVal KeyName As String, _
ByVal DefaultValue As String) As String
' primary version of call gets single value given all parameters
Dim n As Int32
Dim sData As String
sData = space$(1024) ' allocate some room
n = GetPrivateProfileString(SectionName, KeyName, DefaultValue, _
sData, sData.Length, INIPath)
If n > 0 Then ' return whatever it gave us
INIRead = sdata.Substring(0, n)
Else
iniread = ""
End If
End Function

#Region "INIRead Overloads"
Public Overloads Function INIRead(ByVal INIPath As String, _
ByVal SectionName As String, ByVal KeyName As String) As String
' overload 1 assumes zero-length default
Return INIRead(inipath, sectionname, KeyName, "")
End Function

Public Overloads Function INIRead(ByVal INIPath As String, _
ByVal SectionName As String) As String
' overload 2 returns all keys in a given section of the given file
Return INIRead(inipath, sectionname, Nothing, "")
End Function

Public Overloads Function INIRead(ByVal INIPath As String) As String
' overload 3 returns all section names given just path
Return INIRead(inipath, Nothing, Nothing, "")
End Function
#End Region

Public Sub INIWrite(ByVal INIPath As String, ByVal SectionName As String, _
ByVal KeyName As String, ByVal TheValue As String)
Call WritePrivateProfileString(SectionName, KeyName, TheValue, INIPath)
End Sub

Public Overloads Sub INIDelete(ByVal INIPath As String, ByVal SectionName As String, _
ByVal KeyName As String) ' delete single line from section
Call WritePrivateProfileString(SectionName, KeyName, Nothing, INIPath)
End Sub

Public Overloads Sub INIDelete(ByVal INIPath As String, ByVal SectionName As String)
' delete section from INI file
Call WritePrivateProfileString(SectionName, Nothing, Nothing, INIPath)
End Sub

End Module


The code to call this would run along these lines:
Dim sValue As String
Dim sPath As String
sPath = "testing.ini"

INIWrite(sPath, "Section1", "Key1-1", "Value1-1") ' build INI file
INIWrite(sPath, "Section1", "Key1-2", "Value1-2")
INIWrite(sPath, "Section1", "Key1-3", "Value1-3")
INIWrite(sPath, "Section2", "Key2-1", "Value2-1")
INIWrite(sPath, "Section2", "Key2-2", "Value2-2")

sValue = INIRead(sPath, "section2", "key2-1", "Unknown") ' specify all
MessageBox.Show(sValue, "section2/key2-1/unknown", MessageBoxButtons.OK)

sValue = INIRead(sPath, "section2", "XYZ", "Unknown") ' specify all
MessageBox.Show(sValue, "section2/xyz/unknown", MessageBoxButtons.OK)

sValue = INIRead(sPath, "section2", "XYZ") ' use zero-length string as default
MessageBox.Show(sValue, "section2/XYZ", MessageBoxButtons.OK)

sValue = INIRead(sPath, "section1") ' get all keys in section
sValue = sValue.Replace(ControlChars.NullChar, "|"c) ' change embedded NULLs to pipe chars
MessageBox.Show(sValue, "section1 pre delete", MessageBoxButtons.OK)

INIDelete(sPath, "section1", "key1-2") ' delete middle entry in section 1
sValue = INIRead(sPath, "section1") ' get all keys in section again
sValue = sValue.Replace(ControlChars.NullChar, "|"c) ' change embedded NULLs to pipe chars
MessageBox.Show(sValue, "section1 post delete", MessageBoxButtons.OK)

sValue = INIRead(sPath) ' get all section names
sValue = sValue.Replace(ControlChars.NullChar, "|"c) ' change embedded NULLs to pipe chars
MessageBox.Show(sValue, "All sections pre delete", MessageBoxButtons.OK)

INIDelete(sPath, "section1") ' delete section
sValue = INIRead(sPath) ' get all section names
sValue = sValue.Replace(ControlChars.NullChar, "|"c) ' change embedded NULLs to pipe chars
MessageBox.Show(sValue, "All sections post delete", MessageBoxButtons.OK)

沒有留言:

張貼留言