Tipp-Upload: VB.NET 0175: INI-Dateien lesen
von FrankPacher
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.
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 |
Verwendete API-Aufrufe: |
Download: |
' 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.