Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB.NET 0175: INI-Dateien lesen

 von 

Hinweis zum Tippvorschlag  

Dieser Vorschlag wurde noch nicht auf Sinn und Inhalt überprüft und die Zip-Datei wurde noch nicht auf schädlichen Inhalt hin untersucht.
Bitte haben Sie ein wenig Geduld, bis die Freigabe erfolgt.

Über den Tipp  

Dieser Tippvorschlag ist noch unbewertet.

Der Vorschlag ist in den folgenden Kategorien zu finden:

  • Dateien und Laufwerke

Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
INI Dateien, Klasse

Der Vorschlag wurde erstellt am: 11.01.2008 15:30.
Die letzte Aktualisierung erfolgte am 08.04.2008 14:03.

Zurück zur Übersicht

Beschreibung  

cl_IniFiles ist eine einfache Klasse zum Bearbeiten von INI-Dateien.

Obwohl mittlerweile XML für Datenaustausch und Einstellungen das beliebteste Format ist, haben INI-Dateien noch immer ihre Existenzberechtigung. Da ich zur Zeit aus verschiedensten Gründen mit INI-Dateien arbeite, entstand diese Klasse.

Die Daten der Ini-datei können als ASCII oder als UTF-8 geschrieben werden. Außerdem können die Item-Werte MD5-Verschlüsselt werden.

Schwierigkeitsgrad

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

Download:

Download des Beispielprojektes [15,97 KB]

' Dieser Source stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!
'
' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird.
' In den Zip-Dateien ist er jedoch zu finden.

' ----------- Anfang Projektgruppe cl_IniFiles.sln -----------
' ---------- Anfang Projektdatei cl_IniFiles.vbproj ----------
' --------------- Anfang Datei cl_IniFiles.vb  ---------------
' #############################################################################################
' #######################
'
' #  Klasse zum Lesen von "klassischen" Ini-ASCII-Dateien
' #  Bitte "ReadMe.txt" lesen !
' #  Aufbau der Datei:
' #                    [SectionName]
' #                    ItemName=ItemWert
' #                    #Kommentar
' #
' #  V 1  1/2008
' #  (c) Frank Pacher 2008
' #  MD5-Verschlüsselung nach einer Idee von DaveS auf www.vbarchiv.de
' #############################################################################################
' #######################
'

#Region "Imported Name Spaces"
Imports System.IO
Imports System.Text
Imports System.Collections
Imports System.Security.Cryptography
#End Region

' #############################################################################################
' #######################
'
Public Class cl_IniFiles

#Region "Deklarationen"

    Private m_IniFileName As String = "" ' Name der INI-Datei
    Private m_IniFilePath As String = "" ' Pfad für die INI-Datei
    Private m_LastChangeText As String = "# Letzte Aenderung am: "' Wird in die INI-Datei
                                                                  ' bei Änderung eingefügt
    Private m_Err As String = "Fehler..." ' Überschrift für Messagebox
    Private m_ErrFileNotFound As String = "Datei nicht gefunden:" ' Fehlermeldung

    ' Fehlermeldung
    Private m_ErrWriteError As String = "In Datei kann nicht geschrieben werden." & vbLf & _
        "Datei von anderen Nutzer/Programm gesperrt?"

    ' Fehlermeldung
    Private m_ErrReadError As String = "Aus Datei kann nicht gelesen werden." & vbLf & _
        "Datei von anderen Nutzer/Programm gesperrt?"

    ' Fehlermeldung
    Private m_ErrPropertysFailed As String = "Name oder Pfad der INI-Datei wurde nicht angegeben."
#End Region

    ' #########################################################################################
    ' #######################
    '
#Region "Properties"

    ' FileName der INI-Datei OHNE Pfad
    Public Property IniFileName() As String
        Get
            Return m_IniFileName

        End Get

        Set(ByVal IniFileName As String)
            m_IniFileName = IniFileName

        End Set

    End Property

    '
    Public Property IniFilePath() As String

        ' Pfad der INI-Datei OHNE DateiName
        Get
            Return m_IniFilePath

        End Get

        Set(ByVal IniFilePath As String)

            If IniFilePath.EndsWith("\") Then
                m_IniFilePath = IniFilePath

            Else

                m_IniFilePath = IniFilePath & "\"
            End If

        End Set

    End Property

    '
    Public Property LastChangeText() As String

        ' Wird in die INI-Datei bei Änderung eingefügt
        Get
            Return m_LastChangeText

        End Get

        Set(ByVal LastChangeText As String)

            If LastChangeText.StartsWith("#") Then
                m_LastChangeText = LastChangeText

            Else

                m_LastChangeText = "#" & LastChangeText
            End If

        End Set

    End Property

#End Region

    ' #########################################################################################
    ' #######################
    '
#Region "Methoden"

#Region "Standard Methoden"

    Public Sub New()

        ' Erstellung ohne Vorgabewerte
        m_IniFileName = ""
        m_IniFilePath = ""

    End Sub

    Public Sub New(ByVal IniFileName As String, ByVal IniFilePath As String)

        ' Erstellung mit Vorgabewerten
        m_IniFileName = IniFileName

        If IniFilePath.EndsWith("\") Then
            m_IniFilePath = IniFilePath

        Else

            m_IniFilePath = IniFilePath & "\"
        End If

    End Sub

#End Region

#Region "Normal"

    ' * Lesende Methoden *
    Public Function GetColSectionComplete(ByVal SectionName As String) As Dictionary(Of _
        String, String)

        ' Gibt alle Items einer Section als Dictionary-Collection (Name,Wert) zurück.
        ' Bei Fehler oder Section ist nicht vorhanden, wird NOTHING )bzw.
        ' Dictionary.count=0) zurückgegeben
        Dim sTemp As String = ""
        Dim sTemp2 As String = ""
        Dim sTemp3 As String = ""
        Dim sTemp4 As String = ""
        Dim lTemp As Boolean
        Dim oTemp As New Dictionary(Of String, String)

        Try

            If Not Me.IsSetFileName() Then Return Nothing ' Return aTemp

            Dim oFS As New FileStream(m_IniFilePath & m_IniFileName, FileMode.Open, _
                FileAccess.Read, FileShare.Read)

            Dim oSR As New StreamReader(oFS)

            Do Until oSR.Peek = -1
                sTemp = oSR.ReadLine()

                If Not sTemp.StartsWith("#") Then
                    sTemp = sTemp.Trim
                    sTemp2 = sTemp
                    sTemp = sTemp.ToUpper

                    If sTemp.StartsWith("[" & SectionName.ToUpper & "]") Then
                        lTemp = True

                    Else

                        If sTemp.Length > 0 Then
                            If (sTemp.Substring(0, 1) = "[") And (lTemp) Then
                                lTemp = False
                            End If
                        End If
                    End If

                    If lTemp Then
                        If Not sTemp.StartsWith("[") Then
                            If sTemp.IndexOf("=") >= 0 Then
                                sTemp3 = sTemp2.Substring(0, sTemp2.IndexOf("="))
                                sTemp4 = sTemp2.Substring(sTemp2.IndexOf("=") + 1)

                            Else

                                sTemp3 = sTemp2
                                sTemp4 = ""
                            End If

                            If Not oTemp.ContainsKey(sTemp3) Then oTemp.Add(sTemp3, sTemp4)
                        End If
                    End If
                End If

            Loop

            oSR.Close()
            oFS.Close()
            Return oTemp

        Catch ex As IOException

            MessageBox.Show(m_ErrReadError.PadRight(90) & vbLf & "[ " & m_IniFilePath.ToUpper _
                & m_IniFileName.ToUpper & " ]" & vbLf & vbLf & "[" & ex.TargetSite.ToString & _
                "] " & ex.Message, m_Err, MessageBoxButtons.OK, MessageBoxIcon.Stop)

            Return Nothing

        End Try

    End Function

    Public Function GetArrSectionComplete(ByVal SectionName As String) As String(,)

        ' Gibt alle Items einer Section als Array (Name,Wert) zurück.
        Dim aTemp1() As String
        Dim aTemp2() As String

        Dim sTemp As String = ""
        Dim sTemp2 As String = ""
        Dim sTemp3 As String = ""
        Dim sTemp4 As String = ""
        Dim lTemp As Boolean
        Dim iTemp As Int32

        Try

            If Not Me.IsSetFileName() Then Return Nothing

            Dim oFS As New FileStream(m_IniFilePath & m_IniFileName, FileMode.Open, _
                FileAccess.Read, FileShare.Read)

            Dim oSR As New StreamReader(oFS)

            Do Until oSR.Peek = -1
                sTemp = oSR.ReadLine()

                If Not sTemp.StartsWith("#") Then
                    sTemp = sTemp.Trim
                    sTemp2 = sTemp
                    sTemp = sTemp.ToUpper

                    If sTemp.StartsWith("[" & SectionName.ToUpper & "]") Then
                        lTemp = True

                    Else

                        If (sTemp.Substring(0, 1) = "[") And (lTemp) Then
                            lTemp = False
                        End If
                    End If

                    If lTemp Then
                        If Not sTemp.StartsWith("[") Then
                            If Not IsNothing(aTemp1) Then
                                ReDim Preserve aTemp1(aTemp1.GetUpperBound(0) + 1)
                                ReDim Preserve aTemp2(aTemp2.GetUpperBound(0) + 1)

                            Else

                                ReDim Preserve aTemp1(0)
                                ReDim Preserve aTemp2(0)
                            End If

                            If sTemp.IndexOf("=") >= 0 Then
                                sTemp3 = sTemp.Substring(0, sTemp.IndexOf("="))
                                sTemp4 = sTemp.Substring(sTemp.IndexOf("=") + 1)

                            Else

                                sTemp3 = sTemp
                                sTemp4 = ""
                            End If

                            aTemp1(aTemp1.GetUpperBound(0)) = sTemp3
                            aTemp2(aTemp2.GetUpperBound(0)) = sTemp4
                        End If
                    End If
                End If

            Loop

            oSR.Close()
            oFS.Close()

            If IsNothing(aTemp1) Then Return Nothing

            Dim aTemp(aTemp1.GetUpperBound(0), 1) As String

            For iTemp = 0 To aTemp1.GetUpperBound(0)
                aTemp(iTemp, 0) = aTemp1(iTemp)
                aTemp(iTemp, 1) = aTemp2(iTemp)
            Next

            Return aTemp

        Catch ex As IOException

            MessageBox.Show(m_ErrReadError.PadRight(90) & vbLf & "[ " & m_IniFilePath.ToUpper _
                & m_IniFileName.ToUpper & " ]" & vbLf & vbLf & "[" & ex.TargetSite.ToString & _
                "] " & ex.Message, m_Err, MessageBoxButtons.OK, MessageBoxIcon.Stop)

            Return Nothing

        End Try

    End Function

    Public Function GetSectionItem(ByVal SectionName As String, ByVal ItemName As String, _
        Optional ByVal sSchluessel As String = "") As String

        ' Gibt den Wert des Items zurück.
        Dim sTemp As String = ""
        Dim sTemp2 As String = ""
        Dim lTemp As Boolean

        Try

            If Not Me.IsSetFileName() Then Return ""

            Dim oFS As New FileStream(m_IniFilePath & m_IniFileName, FileMode.Open, _
                FileAccess.Read, FileShare.Read)

            Dim oSR As New StreamReader(oFS)

            Do Until oSR.Peek = -1
                sTemp = oSR.ReadLine()

                If Not sTemp.StartsWith("#") Then
                    sTemp = sTemp.Trim
                    sTemp2 = sTemp
                    sTemp = sTemp.ToUpper

                    If sTemp.StartsWith("[" & SectionName.ToUpper & "]") Then
                        lTemp = True

                    Else

                        If Not String.IsNullOrEmpty(sTemp) Then
                            If (sTemp.Substring(0, 1) = "[") And (lTemp) Then
                                lTemp = False
                            End If

                        Else

                            lTemp = False
                        End If
                    End If

                    If lTemp Then
                        If sTemp.StartsWith(ItemName.ToUpper) Then
                            If String.IsNullOrEmpty(sSchluessel) Then
                                sTemp = sTemp2.Substring(sTemp.IndexOf("=") + 1)

                            Else

                                sTemp = Me.MD5ToString(sTemp2.Substring(sTemp.IndexOf("=") + _
                                    1), sSchluessel)

                            End If

                            Return sTemp
                        End If
                    End If
                End If

            Loop

            sTemp = ""
            oSR.Close()
            oFS.Close()
            Return sTemp

        Catch ex As IOException

            MessageBox.Show(m_ErrReadError.PadRight(90) & vbLf & "[ " & m_IniFilePath.ToUpper _
                & m_IniFileName.ToUpper & " ]" & vbLf & vbLf & "[" & ex.TargetSite.ToString & _
                "] " & ex.Message, m_Err, MessageBoxButtons.OK, MessageBoxIcon.Stop)

            Return ""

        End Try

    End Function

    Public Function GetIniLine(ByVal LineNumber As Integer, ByVal NurItemWert As Boolean) As String

        ' Ist <NurItemWert> auf TRUE wird der Wert des Items in Zeile <LineNumber> zurückgegeben.
        ' Ist <NurItemWert> auf FALSE dann wird die gesamte Zeile <LineNumber> zurückgegeben.
        Dim i As Integer = 0
        Dim temp As String = ""

        Try

            If Not Me.IsSetFileName() Then Return ""

            Dim fs As New FileStream(m_IniFilePath & m_IniFileName, FileMode.Open, _
                FileAccess.Read, FileShare.Read)

            Dim sr As New StreamReader(fs)

            Do Until sr.Peek = -1
                i = i + 1

                If NurItemWert Then
                    temp = sr.ReadLine()
                    temp = temp.Substring(temp.IndexOf("=") + 1)

                Else

                    temp = sr.ReadLine()
                End If

                If i >= LineNumber Then Exit Do
            Loop

            sr.Close()
            fs.Close()
            Return temp

        Catch ex As IOException

            MessageBox.Show(m_ErrReadError.PadRight(90) & vbLf & "[ " & m_IniFilePath.ToUpper _
                & m_IniFileName.ToUpper & " ]" & vbLf & vbLf & "[" & ex.TargetSite.ToString & _
                "] " & ex.Message, m_Err, MessageBoxButtons.OK, MessageBoxIcon.Stop)

            Return ""

        End Try

    End Function

    ' * Schreibende Methoden *
    Public Function SetSectionItem(ByVal SectionName As String, ByVal ItemName As String, _
        ByVal ItemValue As String, ByVal ASCIIencoding As Boolean, Optional ByVal sSchluessel _
        As String = "") As Integer

        ' Wurde <ItemValue> geschrieben wird 0 zurückgegeben.
        ' Wenn <ItemName> nicht gefunden wurde, wird 1 zurück gegeben.
        ' Bei Fehler ist der Rückgabewert 2.
        Dim sTemp As String = ""
        Dim sTemp2 As String = ""
        Dim sTest As String = m_LastChangeText
        Dim iTemp As Long = 0
        Dim iRet As Integer = 1
        Dim lTemp, lTemp2 As Boolean

        Try

            If Not Me.IsSetFileName() Then Exit Function

            Dim oMemStream As New MemoryStream
            Dim oMemStreamWriter As New StreamWriter(oMemStream)

            Dim oFileStream As New FileStream(m_IniFilePath & m_IniFileName, FileMode.Open, _
                FileAccess.Read, FileShare.None)

            Dim oFileStreamReader As New StreamReader(oFileStream)

            Do Until oFileStreamReader.Peek = -1
                lTemp2 = True
                sTemp = oFileStreamReader.ReadLine()

                If Not sTemp.StartsWith("#") Then
                    sTemp = sTemp.Trim
                    sTemp2 = sTemp
                    sTemp = sTemp.ToUpper

                    If sTemp.StartsWith("[" & SectionName.ToUpper & "]") Then
                        lTemp = True

                    Else

                        If (sTemp.StartsWith("[") And (lTemp)) Then
                            lTemp = False
                        End If
                    End If

                    If lTemp Then
                        If sTemp.StartsWith(ItemName.ToUpper) Then
                            If String.IsNullOrEmpty(sSchluessel) Then
                                sTemp2 = ItemName.Trim & "=" & ItemValue.Trim

                            Else

                                sTemp2 = ItemName.Trim & "=" & Me.StringToMD5(ItemValue.Trim, _
                                    sSchluessel)

                            End If

                            iRet = 0
                        End If
                    End If

                Else

                    If sTemp.StartsWith(sTest) Then
                        lTemp2 = False
                    End If
                End If

                If lTemp2 Then
                    oMemStreamWriter.WriteLine(sTemp2)
                    oMemStreamWriter.Flush()
                End If

            Loop

            oFileStreamReader.Close()
            oFileStream.Close()

            oMemStream.Position = 0

            Dim oMemStreamReader As New StreamReader(oMemStream)

            Dim oNewFileStream As New FileStream(m_IniFilePath & m_IniFileName, _
                FileMode.Truncate, FileAccess.Write, FileShare.None)

            Dim oNewStreamWriter As New StreamWriter(oNewFileStream, IIf(ASCIIencoding, _
                System.Text.Encoding.ASCII, System.Text.Encoding.UTF8))

            Do Until oMemStreamReader.Peek = -1
                oNewStreamWriter.WriteLine(oMemStreamReader.ReadLine())
            Loop

            oNewStreamWriter.WriteLine(sTest & "  " & Strings.Format(Now(), "dd/MMMM yyyy HH:mm"))

            oMemStreamWriter.Close()
            oMemStreamReader.Close()
            oMemStream.Close()
            oNewStreamWriter.Close()
            oNewFileStream.Close()

            Return iRet

        Catch ex As IOException

            MessageBox.Show(m_ErrWriteError.PadRight(90) & vbLf & "[ " & _
                m_IniFilePath.ToUpper & m_IniFileName.ToUpper & " ]" & vbLf & vbLf & "[" & _
                ex.TargetSite.ToString & "] " & ex.Message, m_Err, MessageBoxButtons.OK, _
                MessageBoxIcon.Stop)

            Return 2

        End Try

    End Function

    Public Sub AddSectionItem(ByVal SectionName As String, ByVal ItemName As String, ByVal _
        ItemValue As String, ByVal ASCIIencoding As Boolean, Optional ByVal sSchluessel As _
        String = "")

        ' Schreibt das Item <ItemName> in der Section <SectionName> mit <ItemWert> neu.
        If Not Me.IsSetFileName() Then Exit Sub

        Dim sTemp As String = ""
        Dim sTemp2 As String = ""
        Dim sTest As String = m_LastChangeText
        Dim iTemp As Long = 0
        Dim lTemp2 As Boolean

        Try

            Dim oMemStream As New MemoryStream
            Dim oMemStreamWriter As New StreamWriter(oMemStream)

            Dim oFileStream As New FileStream(m_IniFilePath & m_IniFileName, FileMode.Open, _
                FileAccess.Read, FileShare.None)

            Dim oStreamReader As New StreamReader(oFileStream)

            Do Until oStreamReader.Peek = -1
                lTemp2 = True
                sTemp = oStreamReader.ReadLine()

                If Not sTemp.StartsWith("#") Then
                    sTemp = sTemp.Trim
                    sTemp2 = sTemp
                    sTemp = sTemp.ToUpper

                    If sTemp.StartsWith("[" & SectionName.ToUpper & "]") Then
                        If String.IsNullOrEmpty(sSchluessel) Then

                            sTemp2 = sTemp2 & Microsoft.VisualBasic.vbLf & ItemName.Trim & _
                                "=" & ItemValue.Trim

                        Else

                            sTemp2 = sTemp2 & Microsoft.VisualBasic.vbLf & ItemName.Trim & _
                                "=" & Me.StringToMD5(ItemValue.Trim, sSchluessel)

                        End If
                    End If

                Else

                    If sTemp.StartsWith(sTest) Then
                        lTemp2 = False
                    End If
                End If

                If lTemp2 Then
                    oMemStreamWriter.WriteLine(sTemp2)
                    oMemStreamWriter.Flush()
                End If

            Loop

            oStreamReader.Close()
            oFileStream.Close()

            oMemStream.Position = 0

            Dim oMemStreamReader As New StreamReader(oMemStream)

            Dim oNewFileStream As New FileStream(m_IniFilePath & m_IniFileName, _
                FileMode.Truncate, FileAccess.Write, FileShare.None)

            Dim oNewStreamWriter As New StreamWriter(oNewFileStream, IIf(ASCIIencoding, _
                System.Text.Encoding.ASCII, System.Text.Encoding.UTF8))

            Do Until oMemStreamReader.Peek = -1
                oNewStreamWriter.WriteLine(oMemStreamReader.ReadLine())
            Loop

            oNewStreamWriter.WriteLine(sTest & "  " & Strings.Format(Now(), "dd/MMMM yyyy HH:mm"))

            oMemStreamWriter.Close()
            oMemStreamReader.Close()
            oMemStream.Close()
            oNewStreamWriter.Close()
            oNewFileStream.Close()

            Exit Sub

        Catch ex As IOException

            MessageBox.Show(m_ErrWriteError.PadRight(90) & vbLf & "[ " & _
                m_IniFilePath.ToUpper & m_IniFileName.ToUpper & " ]" & vbLf & vbLf & "[" & _
                ex.TargetSite.ToString & "] " & ex.Message, m_Err, MessageBoxButtons.OK, _
                MessageBoxIcon.Stop)

            Exit Sub

        End Try

    End Sub

    Public Function AddSection(ByVal SectionName As String, ByVal ASCIIencoding As Boolean) _
        As Boolean

        ' Erstellt die Section <SectionName> neu.
        If Not Me.IsSetFileName() Then Exit Function

        Dim sTemp As String = ""
        Dim sTemp2 As String = ""
        Dim sTest As String = m_LastChangeText
        Dim iTemp As Long = 0
        Dim lTemp2, lTest, lRet As Boolean

        Try

            Dim oMemStream As New MemoryStream
            Dim oMemStreamWriter As New StreamWriter(oMemStream)

            Dim oFileStream As New FileStream(m_IniFilePath & m_IniFileName, FileMode.Open, _
                FileAccess.Read, FileShare.None)

            Dim oStreamReader As New StreamReader(oFileStream)

            Do Until oStreamReader.Peek = -1
                lTemp2 = True
                sTemp = oStreamReader.ReadLine()

                If Not sTemp.StartsWith("#") Then
                    sTemp = sTemp.Trim
                    sTemp2 = sTemp
                    sTemp = sTemp.ToUpper

                    If sTemp.StartsWith("[" & SectionName.ToUpper & "]") Then
                        lTest = True
                    End If

                Else

                    If sTemp.StartsWith(sTest) Then
                        lTemp2 = False
                    End If
                End If

                If lTemp2 Then
                    oMemStreamWriter.WriteLine(sTemp2)
                    oMemStreamWriter.Flush()
                End If

            Loop

            oStreamReader.Close()
            oFileStream.Close()

            oMemStream.Position = 0

            Dim oMemStreamReader As New StreamReader(oMemStream)

            Dim oNewFileStream As New FileStream(m_IniFilePath & m_IniFileName, _
                FileMode.Truncate, FileAccess.Write, FileShare.None)

            Dim oNewStreamWriter As New StreamWriter(oNewFileStream, IIf(ASCIIencoding, _
                System.Text.Encoding.ASCII, System.Text.Encoding.UTF8))

            Do Until oMemStreamReader.Peek = -1
                oNewStreamWriter.WriteLine(oMemStreamReader.ReadLine())
            Loop

            If Not lTest Then
                oNewStreamWriter.WriteLine("[" & SectionName & "]")
                lRet = True
            End If

            oNewStreamWriter.WriteLine(sTest & "  " & Strings.Format(Now(), "dd/MMMM yyyy HH:mm"))

            oMemStreamWriter.Close()
            oMemStreamReader.Close()
            oMemStream.Close()
            oNewStreamWriter.Close()
            oNewFileStream.Close()
            Return lRet

        Catch ex As IOException

            MessageBox.Show(m_ErrWriteError.PadRight(90) & vbLf & "[ " & _
                m_IniFilePath.ToUpper & m_IniFileName.ToUpper & " ]" & vbLf & vbLf & "[" & _
                ex.TargetSite.ToString & "] " & ex.Message, m_Err, MessageBoxButtons.OK, _
                MessageBoxIcon.Stop)

            Return False

        End Try

    End Function

    Public Function BuildIniFile() As Boolean

        ' Erstellt eine neue INI-Datei mit IniFileName in IniFilePath
        Try

            If IO.File.Exists(m_IniFilePath & m_IniFileName) Then Return False
            If Not IsSetFileName() Then Return False
            File.Create(m_IniFilePath & m_IniFileName)
            Return True

        Catch ex As IOException

            MessageBox.Show(m_ErrWriteError.PadRight(90) & vbLf & "[ " & _
                m_IniFilePath.ToUpper & m_IniFileName.ToUpper & " ]" & vbLf & vbLf & "[" & _
                ex.TargetSite.ToString & "] " & ex.Message, m_Err, MessageBoxButtons.OK, _
                MessageBoxIcon.Stop)

            Return False

        End Try

    End Function

    ' * Löschende Metoden *
    Public Function DelSection(ByVal SectionName As String, ByVal ASCIIencoding As Boolean) _
        As Boolean

        ' Löscht gesamte Section <SectionName>
        If Not Me.IsSetFileName() Then Exit Function

        Dim sTemp As String = ""
        Dim sTemp2 As String = ""
        Dim sTest As String = m_LastChangeText
        Dim iTemp As Long = 0
        Dim lTemp2 As Boolean
        Dim lRet As Boolean

        Try

            Dim oMemStream As New MemoryStream
            Dim oMemStreamWriter As New StreamWriter(oMemStream)

            Dim oFileStream As New FileStream(m_IniFilePath & m_IniFileName, FileMode.Open, _
                FileAccess.Read, FileShare.None)

            Dim oStreamReader As New StreamReader(oFileStream)

            Do Until oStreamReader.Peek = -1

                ' lTemp2 = True
                sTemp = oStreamReader.ReadLine()

                If Not sTemp.StartsWith("#") Then
                    sTemp = sTemp.Trim
                    sTemp2 = sTemp
                    sTemp = sTemp.ToUpper

                    ' Section beginnt
                    If sTemp.StartsWith("[" & SectionName.ToUpper & "]") Then
                        lTemp2 = False
                        lRet = True

                    Else

                        If Not lTemp2 Then
                            If sTemp.StartsWith("[") And Not lTemp2 Then
                                lTemp2 = True
                            End If
                        End If
                    End If

                Else

                    If sTemp.StartsWith(sTest) Then
                        lTemp2 = False
                    End If
                End If

                If lTemp2 Then
                    oMemStreamWriter.WriteLine(sTemp2)
                    oMemStreamWriter.Flush()
                End If

            Loop

            oStreamReader.Close()
            oFileStream.Close()

            oMemStream.Position = 0

            Dim oMemStreamReader As New StreamReader(oMemStream)

            Dim oNewFileStream As New FileStream(m_IniFilePath & m_IniFileName, _
                FileMode.Truncate, FileAccess.Write, FileShare.None)

            Dim oNewStreamWriter As New StreamWriter(oNewFileStream, IIf(ASCIIencoding, _
                System.Text.Encoding.ASCII, System.Text.Encoding.UTF8))

            Do Until oMemStreamReader.Peek = -1
                oNewStreamWriter.WriteLine(oMemStreamReader.ReadLine())
            Loop

            oNewStreamWriter.WriteLine(sTest & "  " & Strings.Format(Now(), "dd/MMMM yyyy HH:mm"))

            oMemStreamWriter.Close()
            oMemStreamReader.Close()
            oMemStream.Close()
            oNewStreamWriter.Close()
            oNewFileStream.Close()
            Return lRet

        Catch ex As IOException

            MessageBox.Show(m_ErrWriteError.PadRight(90) & vbLf & "[ " & _
                m_IniFilePath.ToUpper & m_IniFileName.ToUpper & " ]" & vbLf & vbLf & "[" & _
                ex.TargetSite.ToString & "] " & ex.Message, m_Err, MessageBoxButtons.OK, _
                MessageBoxIcon.Stop)

            Return False

        End Try

    End Function

    Public Function DelSectionItem(ByVal SectionName As String, ByVal ItemName As String, _
        ByVal ASCIIencoding As Boolean) As Boolean

        ' Löscht in Section <SectionName> das Item <ItemName>
        If Not Me.IsSetFileName() Then Exit Function

        Dim sTemp As String = ""
        Dim sTemp2 As String = ""
        Dim sTest As String = m_LastChangeText
        Dim iTemp As Long = 0
        Dim lTemp, lTemp2, lRet As Boolean

        Try

            Dim oMemStream As New MemoryStream
            Dim oMemStreamWriter As New StreamWriter(oMemStream)

            Dim oFileStream As New FileStream(m_IniFilePath & m_IniFileName, FileMode.Open, _
                FileAccess.Read, FileShare.None)

            Dim oStreamReader As New StreamReader(oFileStream)

            Do Until oStreamReader.Peek = -1
                lTemp2 = True
                sTemp = oStreamReader.ReadLine()

                If Not sTemp.StartsWith("#") Then
                    sTemp = sTemp.Trim
                    sTemp2 = sTemp
                    sTemp = sTemp.ToUpper

                    If sTemp.StartsWith("[" & SectionName.ToUpper & "]") Then
                        lTemp = True

                    Else

                        If (sTemp.StartsWith("[") And (lTemp)) Then
                            lTemp = False
                        End If
                    End If

                    If lTemp Then
                        If sTemp.StartsWith(ItemName.ToUpper) Then
                            lTemp2 = False
                            lRet = True
                        End If
                    End If

                Else

                    If sTemp.StartsWith(sTest) Then
                        lTemp2 = False
                    End If
                End If

                If lTemp2 Then
                    oMemStreamWriter.WriteLine(sTemp2)
                    oMemStreamWriter.Flush()
                End If

            Loop

            oStreamReader.Close()
            oFileStream.Close()

            oMemStream.Position = 0

            Dim oMemStreamReader As New StreamReader(oMemStream)

            Dim oNewFileStream As New FileStream(m_IniFilePath & m_IniFileName, _
                FileMode.Truncate, FileAccess.Write, FileShare.None)

            Dim oNewStreamWriter As New StreamWriter(oNewFileStream, IIf(ASCIIencoding, _
                System.Text.Encoding.ASCII, System.Text.Encoding.UTF8))

            Do Until oMemStreamReader.Peek = -1
                oNewStreamWriter.WriteLine(oMemStreamReader.ReadLine())
            Loop

            oNewStreamWriter.WriteLine(sTest & "  " & Strings.Format(Now(), "dd/MMMM yyyy HH:mm"))

            oMemStreamWriter.Close()
            oMemStreamReader.Close()
            oMemStream.Close()
            oNewStreamWriter.Close()
            oNewFileStream.Close()
            Return lRet

        Catch ex As IOException

            MessageBox.Show(m_ErrWriteError.PadRight(90) & vbLf & "[ " & _
                m_IniFilePath.ToUpper & m_IniFileName.ToUpper & " ]" & vbLf & vbLf & "[" & _
                ex.TargetSite.ToString & "] " & ex.Message, m_Err, MessageBoxButtons.OK, _
                MessageBoxIcon.Stop)

            Return False

        End Try

    End Function

#End Region
#Region "Sonstige Methoden"

    Public Function StringToMD5(ByVal sItemValue As String, ByVal sSchluessel As String) As String

        ' Der String <sItemValue> wird mit dem Schlüsses <sSchluessel> MD5 verschlüsselt
        Try

            Dim sRet As String = ""
            Dim oRijndaelAlg As New RijndaelManaged
            Dim oMd5 As New MD5CryptoServiceProvider
            Dim oKey() As Byte = oMd5.ComputeHash(Encoding.UTF8.GetBytes(sSchluessel))

            oMd5.Clear()
            oRijndaelAlg.Key = oKey
            oRijndaelAlg.GenerateIV()

            Dim oIV() As Byte = oRijndaelAlg.IV
            Dim oMemStream As New MemoryStream

            oMemStream.Write(oIV, 0, oIV.Length)

            Dim oCryptoStream As New CryptoStream(oMemStream, oRijndaelAlg.CreateEncryptor, _
                CryptoStreamMode.Write)

            Dim oDaten() As Byte = System.Text.Encoding.UTF8.GetBytes(sItemValue)

            oCryptoStream.Write(oDaten, 0, oDaten.Length)
            oCryptoStream.FlushFinalBlock()

            Dim oEncodingData() As Byte = oMemStream.ToArray()

            sRet = Convert.ToBase64String(oEncodingData)
            oCryptoStream.Close()
            oRijndaelAlg.Clear()
            Return sRet

        Catch ex As Exception

            MessageBox.Show("Verschlüsselungsfehler!" & vbLf & "Eventuell falsches " & _
                "Passwort benutzt?" & vbLf & vbLf & "Systemmeldung:" & vbLf & ex.Message, _
                "Fehler...", MessageBoxButtons.OK, MessageBoxIcon.Warning)

            Return ""

        End Try

    End Function

    Public Function MD5ToString(ByVal sMD5ItemValue As String, ByVal sSchluessel As String) _
        As String

        ' Der String <sMD5ItemValue> wird mit dem Schlüsses <sSchluessel> MD5 entschlüsselt
        Try

            Dim sRet As String = ""
            Dim oRijndaelAlg As New RijndaelManaged
            Dim orijndaelIVLength As Integer = 16
            Dim oMd5 As New MD5CryptoServiceProvider
            Dim aKey() As Byte = oMd5.ComputeHash(Encoding.UTF8.GetBytes(sSchluessel))

            oMd5.Clear()

            Dim oEncodeData() As Byte = Convert.FromBase64String(sMD5ItemValue)
            Dim oMemStream As New MemoryStream(oEncodeData)
            Dim oIV(15) As Byte

            oMemStream.Read(oIV, 0, orijndaelIVLength)
            oRijndaelAlg.IV = oIV
            oRijndaelAlg.Key = aKey

            Dim oCryptoStream As New CryptoStream(oMemStream, oRijndaelAlg.CreateDecryptor, _
                CryptoStreamMode.Read)

            Dim oDaten(oMemStream.Length - orijndaelIVLength) As Byte
            Dim iTemp As Integer = oCryptoStream.Read(oDaten, 0, oDaten.Length)

            sRet = System.Text.Encoding.UTF8.GetString(oDaten, 0, iTemp)
            oCryptoStream.Close()
            oRijndaelAlg.Clear()
            Return sRet

        Catch ex As Exception

            MessageBox.Show("Verschlüsselungsfehler!" & vbLf & "Eventuell falsches " & _
                "Passwort benutzt?" & vbLf & vbLf & "Systemmeldung:" & vbLf & ex.Message, _
                "Fehler...", MessageBoxButtons.OK, MessageBoxIcon.Warning)

            Return ""

        End Try

    End Function

    Public Function IsSetFileName() As Boolean

        ' Prüft ob die Properties IniFileName,IniFilePath gesetzt sind, und ob die INI-Datei
        ' existiert.
        If (String.IsNullOrEmpty(m_IniFileName) Or String.IsNullOrEmpty(m_IniFilePath)) Then
            MessageBox.Show(m_ErrPropertysFailed, m_Err, MessageBoxButtons.OK, MessageBoxIcon.Stop)
            Return False  ' Weiter prüfungen sinnlos
        End If

        If IO.File.Exists(m_IniFilePath & m_IniFileName) Then
            Return True

        Else

            MessageBox.Show(m_ErrFileNotFound.PadRight(90) & vbLf & "[ " & _
                m_IniFilePath.ToUpper & m_IniFileName.ToUpper & " ]", m_Err, _
                MessageBoxButtons.OK, MessageBoxIcon.Stop)

            Return False
        End If

    End Function

#End Region
#End Region

End Class

' # <EOF> #####################################################################################
' ######################
'

' ---------------- Ende Datei cl_IniFiles.vb  ----------------
' ----------- Ende Projektdatei cl_IniFiles.vbproj -----------
' ------------ Ende Projektgruppe cl_IniFiles.sln ------------

	

Diskussion  

Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Folgende Diskussionen existieren bereits

Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.