You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

98 lines
4.6 KiB

Imports System.IO
Imports System.Runtime.InteropServices
Imports System.Text
Namespace Ini
Public Class IniFile
#Region "DLL Import"
''' <summary>
''' Записывает ключ в заданный раздел INI-файла.
''' </summary>
''' <param name="section">Имя раздела.</param>
''' <param name="key">Имя ключа.</param>
''' <param name="value">Значение ключа.</param>
''' <param name="filePath">Путь к INI-файлу.</param>
<DllImport("kernel32")>
Private Shared Function WritePrivateProfileString(ByVal section As String, ByVal key As String, ByVal value As String, ByVal filePath As String) As Long
End Function
''' <summary>
''' Считывает ключ заданного раздела INI-файла.
''' </summary>
''' <param name="section">Имя раздела.</param>
''' <param name="key">Имя ключа.</param>
''' <param name="[default]"></param>
''' <param name="retVal"></param>
''' <param name="size"></param>
''' <param name="filePath">Путь к INI-файлу.</param>
''' <remarks>С помощью конструктора записываем путь до файла и его имя. </remarks>
<DllImport("kernel32")>
Private Shared Function GetPrivateProfileString(ByVal section As String, ByVal key As String, ByVal [default] As String, ByVal retVal As StringBuilder, ByVal size As Integer, ByVal filePath As String) As Integer
End Function
#End Region '/DLL Import
#Region "Constructor"
''' <summary>
''' Имя файла.
''' </summary>
Private IniPath As String
''' <summary>
''' Читаем ini-файл и возвращаем значение указного ключа из заданной секции.
''' </summary>
''' <param name="iniPath"></param>
Public Sub New(ByVal iniPath As String)
Me.IniPath = New FileInfo(iniPath).FullName.ToString
End Sub
#End Region
#Region "INI-file Methods"
''' <summary>
''' Проверяет, что заданный ключ существует в INI-файле.
''' </summary>
''' <param name="section">Имя раздела.</param>
''' <param name="key">Имя ключа.</param>
Public Function KeyExists(ByVal section As String, ByVal key As String) As Boolean
Return (Me.ReadKey(section, key).Length > 0)
End Function
''' <summary>
''' Читает значение заданного ключа в заданном разделе INI-файла.
''' </summary>
''' <param name="section">Имя раздела.</param>
''' <param name="key">Имя ключа.</param>
Public Function ReadKey(ByVal section As String, ByVal key As String) As String
Dim retVal As New StringBuilder(&HFF)
IniFile.GetPrivateProfileString(section, key, "", retVal, &HFF, Me.IniPath)
Return retVal.ToString()
End Function
''' <summary>
''' Создаёт заданный ключ в заданном разделе. Если раздел не существует, он будет создан.
''' </summary>
''' <param name="section">Имя раздела.</param>
''' <param name="key">Имя ключа.</param>
''' <param name="value">Значение ключа. Если NULL, то ключ будет удалён. Если String.Empty, то присвоится пустое значение.</param>
Public Sub WriteKey(ByVal section As String, ByVal key As String, ByVal value As String)
IniFile.WritePrivateProfileString(section, key, value, Me.IniPath)
End Sub
''' <summary>
''' Удаляет заданный ключ из заданного раздела INI-файла.
''' </summary>
''' <param name="section">Имя раздела.</param>
''' <param name="key">Имя ключа.</param>
Public Sub DeleteKey(ByVal section As String, ByVal key As String)
Me.WriteKey(section, key, Nothing)
End Sub
''' <summary>
''' Удаляет заданный раздел INI-файла.
''' </summary>
''' <param name="section">Имя раздела.</param>
Public Sub DeleteSection(ByVal section As String)
Me.WriteKey(section, Nothing, Nothing)
End Sub
#End Region
End Class
End Namespace