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
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
|
' v1.0: Entnommen aus: http://dotnet-snippets.de/dns/klasse-fuer-verwendung-von-ini-dateien-SID938.aspx
' änderungen von www.RaphaelWolfer.de
' v1.1: BugFix - Fehler bei "DateiLöschen" behoben (Private/Public)
' v1.2: Konstuktor für Pfad hinzu gefügt
' v1.3: Exceptions bei Dateilese- und Schreibfehlern werden gefangen
Public Class INIDatei
' Öffentliche Klassenvariablen, Ändern des Pfades nach der Instanziierung möglich
Public Pfad As String
' Konstruktor für setzen des Pfades
' Instanziieren mit z.B.:
' Dim Inipfad As String = My.Application.Info.DirectoryPath & "\beispiel.ini"
' Dim ini As New INIDatei(Inipfad)
Sub New(ByVal Pfad_der_ini As String)
Pfad = Pfad_der_ini
End Sub
' Instantiierung ohne Pfad wird nicht erlaubt
'Sub New() 'kein Pfad notwendig...
'End Sub
' 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
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
Try
' 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
Catch ex As Exception
MsgBox(ex.Message)
End Try
' 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)
Try
If Not (System.IO.File.Exists(Pfad)) Then
MsgBox("Die Datei " & vbCrLf & Pfad & vbCrLf & "existiert nicht und wird neu angelegt")
End If
Dim Filetest As Short = FreeFile()
FileOpen(Filetest, Pfad, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.LockReadWrite)
FileClose(Filetest)
' MsgBox(System.IO.File.GetAccessControl(Pfad))
'Dim fs As New System.IO.FileStream(Pfad, IO.FileMode.)
'Dim fs As New System.IO.FileStream(Pfad, IO.FileMode.OpenOrCreate, IO.FileAccess.Write)
' 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
'System.IO.FileSt()
' 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)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Public Sub SchlüsselLöschen(ByVal Sektion As String, ByVal Schlüssel As String)
Try
' 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)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Public Sub SektionLöschen(ByVal Sektion As String)
Try
' 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)
Catch ex As Exception
MsgBox(ex.Message)
End Try
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"
Try
' 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)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Public 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
Try
' 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)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class
|