Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1562 | Anzahl registrierter User: 1893 | Besucher online: 160
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Klasse für Verwendung von INI-Dateien


Autor: Gast
Sprache: VB.NET
Bewertung:
6.54 (3 votes)
Anzahl der Aufrufe: 21178
  
Kick it on dotnet-kicks.de  

Beschreibung:

Die nachfolgende Klasse deckt alle Erfordernisse ab, die im Zusammenhang mit INI-Dateien entstehen. Sie unterstützt folgende

Eigenschaften:

Pfad: Angeben des Pfades zur betreffenden Datei in einer oder Lesen desselben aus einer String-Variable.

Methoden:

- WertLesen: Liest einen Wert aus. Als Argumente müssen die Sektion und der Schlüssel, dessen Wert gelesen werden soll, angegeben werden.

- WertSchreiben: Schreibt einen Wert in die INI. Erforderliche Argumente: Sektion, Schlüssel und der Wert selbst (dieser kann z.B. der Text-Eigenschaft eines Steuerelementes entnommen werden).

- SchlüsselLöschen: Löscht innerhalb einer als Argument anzugebenen Sektion einen definierten Schlüssel nebst seines Wertes.

- SektionLöschen: Löscht eine komplette Sektion, die als Argument erwartet wird.

- BackupAnlegen: Erstellt ein Backup der Datei; der Zielpfad ist als Argument anzugeben. Dabei wird ein kompletter Pfad, inklusive Dateiname(!) erwartet und nicht nur der Zielordner. Beispiel für den Zielpfad: "D:\Test\MeinProgrammEinstellungen_Backup.ini"

- DateiLöschen: Löscht die INI, die in der Eigenschaft Pfad spezifiziert ist.

Die Rückgabe ausgelesener Werte erfolgt immer als String-Variable.

Ich weiß, Deutsch für Variablen u.ä. ist eigentlich verpönt - aber hilfreich für den, der in der Schule kein Englisch lernen konnte (wie ich) und für den deshalb das Deutsche einfacher ist. Also bitte über diesen Umstand nicht meckern ;-)

Der Code verwendet Snippets, die teilweise in anderen Listings hier schon verwendet werden (quasi eine Zusammenstellung mehrerer Snippetss in einer Klasse, ergänzt um Zusatzfunktionen).


Abgelegt unter: INI-Handling, INI lesen, INI schreiben, Sektion löschen, Wert löschen, ini.



Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
Option Explicit On

Public Class INIDatei
    ' DLL-Funktionen zum LESEN der INI deklarieren
    Private Declare Ansi Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
        ByVal lpApplicationName As String, ByVal lpSchlüsselName As String, ByVal lpDefault As String, _
        ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer

    'DLL-Funktion zum SCHREIBEN in die INI deklarieren
    Private Declare Ansi Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
        ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, _
        ByVal lpFileName As String) As Integer

    'DLL-Funktion zum Löschen einer ganzen Sektion deklarieren
    Private Declare Ansi Function DeletePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
        ByVal Section As String, ByVal NoKey As Integer, ByVal NoSetting As Integer, _
        ByVal FileName As String) As Integer

    ' Öffentliche Klassenvariablen
    Public Pfad As String

    Public Function WertLesen(ByVal Sektion As String, ByVal Schlüssel As String, Optional ByVal Standardwert As String = "", Optional ByVal BufferSize As Integer = 1024) As String
        ' Testen, ob ein Pfad zur INI vorhanden ist
        If Pfad = "" Then
            MsgBox("Es ist kein Pfad zur INI angegeben. Deshalb ist das Auslesen des Wertes nicht möglich." _
                & vbCrLf & vbCrLf & "Angeforderte Sektion: " & Sektion & vbCrLf & "Angeforderter Schlüssel: " _
                & Schlüssel, MsgBoxStyle.Exclamation, "Pfad zur INI-Datei fehlt")
            WertLesen = "Lesefehler"
            Exit Function
        End If

        ' Testen, ob die Datei existiert
        If IO.File.Exists(Pfad) = False Then
            MsgBox("Die angegebene INI-Datei exstiert auf diesem Rechner nicht. Deshalb ist das " _
                & "Auslesen des Wertes nicht möglich." & vbCrLf & vbCrLf & "INI-Datei: " & Pfad _
                & vbCrLf & "Angeforderte Sektion: " & Sektion & vbCrLf & "Angeforderter Schlüssel: " _
                & Schlüssel, MsgBoxStyle.Exclamation, "Pfad zur INI-Datei fehlt")
            WertLesen = "Lesefehler"
            Exit Function
        End If

        ' Auslesen des Wertes
        Dim sTemp As String = Space(BufferSize)
        Dim Length As Integer = GetPrivateProfileString(Sektion, Schlüssel, Standardwert, sTemp, BufferSize, Pfad)
        Return Left(sTemp, Length)
    End Function

    Public Sub WertSchreiben(ByVal Sektion As String, ByVal Schlüssel As String, ByVal Wert As String)
        ' Testen, ob ein Pfad zur INI vorhanden ist
        If Pfad = "" Then
            MsgBox("Es ist kein Pfad zur INI angegeben. Deshalb ist das Schreiben des Wertes nicht möglich." _
                & vbCrLf & vbCrLf & "Angeforderte Sektion: " & Sektion & vbCrLf & "Zu schreibender Schlüssel: " _
                & Schlüssel, MsgBoxStyle.Exclamation, "Pfad zur INI-Datei fehlt")
            Exit Sub
        End If

        ' Testen, ob der Order, in dem die INI liegen soll, existiert
        Dim Ordner As String
        Ordner = IO.Path.GetDirectoryName(Pfad)
        If IO.Directory.Exists(Ordner) = False Then
            MsgBox("Die angegebene Ordner für die INI-Datei exstiert auf diesem Rechner nicht. Deshalb ist das " _
                & "Schreiben des Wertes nicht möglich." & vbCrLf & vbCrLf & "Fehlender Ordner: " & Ordner _
                & vbCrLf & "Angeforderte Sektion: " & Sektion & vbCrLf & "Zu schreibender Schlüssel: " _
                & Schlüssel, MsgBoxStyle.Exclamation, "Pfad zur INI-Datei existiet nicht")
            Exit Sub
        End If

        ' Schreiben in die INI durchführen
        WritePrivateProfileString(Sektion, Schlüssel, Wert, Pfad)
    End Sub

    Public Sub SchlüsselLöschen(ByVal Sektion As String, ByVal Schlüssel As String)
        ' Testen, ob ein Pfad zur INI vorhanden ist
        If Pfad = "" Then
            MsgBox("Es ist kein Pfad zur INI angegeben. Deshalb ist das Löschen des Schlüssels nicht möglich." _
                & vbCrLf & vbCrLf & "Angeforderte Sektion: " & Sektion & vbCrLf & "Zu löschender Schlüssel: " _
                & Schlüssel, MsgBoxStyle.Exclamation, "Pfad zur INI-Datei fehlt")
            Exit Sub
        End If

        ' Testen, ob die der Order, in dem die INI liegen soll, existiert
        Dim Ordner As String
        Ordner = IO.Path.GetDirectoryName(Pfad)
        If IO.Directory.Exists(Ordner) = False Then
            MsgBox("Die angegebene Ordner für die INI-Datei exstiert auf diesem Rechner nicht. Deshalb ist das " _
                & "Löschen des Wertes nicht möglich." & vbCrLf & vbCrLf & "Fehlender Ordner: " & Ordner _
                & vbCrLf & "Angeforderte Sektion: " & Sektion & vbCrLf & "Zu löschender Schlüssel: " _
                & Schlüssel, MsgBoxStyle.Exclamation, "Pfad zur INI-Datei existiert nicht")
            Exit Sub
        End If

        ' Löschen des Schlüssels durch eine Schreiboperation durchführen
        WritePrivateProfileString(Sektion, Schlüssel, Nothing, Pfad)
    End Sub

    Public Sub SektionLöschen(ByVal Sektion As String)
        ' Testen, ob ein Pfad zur INI vorhanden ist
        If Pfad = "" Then
            MsgBox("Es ist kein Pfad zur INI angegeben. Deshalb ist das Löschen der Sektion nicht möglich." _
                & vbCrLf & vbCrLf & "Angeforderte Sektion: " & Sektion, MsgBoxStyle.Exclamation, _
                "Pfad zur INI-Datei fehlt")
            Exit Sub
        End If

        ' Testen, ob die Datei existiert
        If IO.File.Exists(Pfad) = False Then
            MsgBox("Die angegebene INI-Datei exstiert auf diesem Rechner nicht. Deshalb ist das " _
                & "Löschen der Sektion nicht möglich." & vbCrLf & vbCrLf & "INI-Datei: " & Pfad _
                & vbCrLf & "Angeforderte Sektion: ", MsgBoxStyle.Exclamation, "Pfad zur INI-Datei fehlt")
            Exit Sub
        End If

        'Löschen der Sektion durchführen
        DeletePrivateProfileSection(Sektion, 0, 0, Pfad)
    End Sub

    Public Sub BackupAnlegen(ByVal Zielpfad As String, Optional ByVal FehlermeldungAnzeigen As Boolean = False)
        'Als Zielpfad muss ein DATEIpfad angegeben werden, nicht nur der Ordner
        ' (also z.B. "D:\Test\MeinProgrammEinstellungen_Backup.ini"

        ' Testen, ob ein Pfad zur INI (der Quelldatei) vorhanden ist
        If Pfad = "" Then
            If FehlermeldungAnzeigen = True Then
                MsgBox("Es ist kein Pfad zur INI, von der ein Backup angelegt werden soll, angegeben." _
                    & "Das Backup konnte NICHT angelegt werden.", MsgBoxStyle.Exclamation, "Pfad zur INI-Datei fehlt")
            End If
            Exit Sub
        End If

        ' Testen, ob der Ordner des Zielpfades existiert
        Dim Ordner As String
        Ordner = IO.Path.GetDirectoryName(Pfad)
        If IO.Directory.Exists(Ordner) = False Then
            If FehlermeldungAnzeigen = True Then
                MsgBox(Zielpfad & vbCrLf & vbCrLf & "Dieser Ordner existiert nicht." _
                   & vbCrLf & vbCrLf & "Das Backup konnte NICHT angelegt werden.", MsgBoxStyle.Exclamation, _
                   "Zielordner existiert nicht")
            End If
            Exit Sub
        End If
        ' Kopie der INI erstellen
        IO.File.Copy(Pfad, Zielpfad)
    End Sub

    Private Sub DateiLöschen(Optional ByVal FehlermeldungAnzeigen As Boolean = False)
        ' Testen, ob ein Pfad zur INI (der Quelldatei) vorhanden ist
        If Pfad = "" Then
            If FehlermeldungAnzeigen = True Then
                MsgBox("Es ist kein Pfad zur INI, die gelöscht werden soll, angegeben." _
                    & "Das Löschen konnte NICHT durchgeführt werden.", MsgBoxStyle.Exclamation, "Pfad zur INI-Datei fehlt")
            End If
            Exit Sub
        End If

        ' Testen, ob die Datei existiert
        If IO.File.Exists(Pfad) = False Then
            If FehlermeldungAnzeigen = True Then
                MsgBox(Pfad & vbCrLf & vbCrLf & "Diese Datei existiert bereits nicht mehr. " _
                    & "Das Löschen hat sich damit erübrigt.", MsgBoxStyle.Exclamation, _
                   "Datei existiert nicht mehr")
            End If
            Exit Sub
        End If

        ' Löschen durchführen
        IO.File.Delete(Pfad)
 End Sub

End Class
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

Volker Steitz schrieb am:  08.09.2008 22:04:57

Sehr praktisch
raphzahn schrieb am:  05.02.2009 14:37:46

Löschen von Ini-dateien mit der Option "DateiLöschen" funktioniert so nicht. => Privat muss in Public geändert werden!

Sonst sehr nützliche Klasse
Grüße, Raphael Wolfer
raphzahn schrieb am:  10.02.2009 16:14:42

Eine neue Version der Ini-Klasse findet ihr unter: http://dotnet-snippets.de/dns/neu-klasse-fuer-verwendung-von-ini-dateien-SID1076.aspx
Grüße Raphael


schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.