Um zu prüfen, ob eine Datei aus einem bestimmten Text besteht, um z.B. vor dem Schreiben einer Datei festzustellen ob diese sich geändert hat und neu erstellt werden muss, habe ich die Funktion "FileContainsText" erstellt. Diese Funktion vergleicht den Text mit der Datei erst einmal anhand der Länge. Sind beide Längen identisch, wird der Inhalt mittels MD5-Hash-Wert verglichen (ist etwas schneller als Zeilenweise zu vergleichen). In nachfolgendem Code finden Sie auch eine Funktion "ByteArrayToString", die für die Funktion "FileContainsText" zwar nicht benötigt wird, aber uns eine MD5-Byte-Array in eine String umwandeln kann Im Deklartionsberich eines (neuen) Moduls müssen Sie folgende Imports aufnehmen: Imports System.IO Imports System.Text Imports System.Security.Cryptography Nun fügen Sie folgende Funktione hinzu: ''' <summary> ''' Mit dieser Funktion ermitteln Sie ob ein Text mit dem Inhalt ''' einer Datei übereinstimmt (Liefert dann True zurück) ''' </summary> ''' <param name="file1">Bestimmt die Datei (inkl. Pfad)</param> ''' <param name="Text">Bestimmt den Text der mit dem Inhalt ''' der Datei verglichen werden soll.</param> ''' <returns>True/False (True wenn Text und Inhalt der Datei übereinstimmen)</returns> ''' <remarks></remarks> Public Function FileContainsText(ByVal file1 As String, ByVal Text As String) As Boolean Dim fi1 As New FileInfo(file1) Dim tmpResult As Boolean = True ' Wenn sich länger unterscheiden, direkt False zurück geben If fi1.Length <> Text.Length Then tmpResult = False ' Dateigrößen sind gleich, jetzt mit Hash vergleichen Dim oStreamReader As StreamReader = New StreamReader(file1, System.Text.Encoding.Default) Dim fs1 As FileStream = oStreamReader.BaseStream ' MD5 Dim md5 As New MD5CryptoServiceProvider Dim hash1 As Byte() = md5.ComputeHash(fs1) Dim hash2 As Byte() = MD5HashForString(Text) For i As Integer = 0 To hash1.Length - 1 If Not (hash1(i).Equals(hash2(i))) Then tmpResult = False Exit For End If Next oStreamReader.Close() oStreamReader = Nothing fi1 = Nothing fs1.Close() fs1 = Nothing Return tmpResult End Function ''' <summary> ''' Liefert den MD5-Hash-Wert eines Strings als Byte-Array zurück ''' </summary> ''' <param name="Text">Text zu dem ein Byte-Array ermittelt werden soll</param> ''' <returns></returns> ''' <remarks>Als Encoding wird der System.Default verwendet</remarks> Public Function MD5HashForString(ByVal Text As String) As Byte() Dim enc As System.Text.Encoding = System.Text.Encoding.Default Dim tmpSource() As Byte = enc.GetBytes(Text) MD5HashForString = New MD5CryptoServiceProvider().ComputeHash(tmpSource) End Function ''' <summary> ''' Liefert ein Byte-Array als String zurück (können Sie verwenden um einen ''' MD5-Hash-Wert vom Type "Byte-Array" in eine String um zu wandeln ''' </summary> ''' <param name="arrInput"></param> ''' <returns></returns> ''' <remarks></remarks> Public Function ByteArrayToString(ByVal arrInput() As Byte) As String Dim i As Integer Dim sOutput As New StringBuilder(arrInput.Length) For i = 0 To arrInput.Length - 1 sOutput.Append(arrInput(i).ToString("X2")) Next Return sOutput.ToString() End Function Hier ein Beispiel-Aufruf innerhalb eines Form_Load: Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' Info zurückgeben, ob Text mit dem Inhalt einer Datei übereinstimmt MessageBox.Show(FileContainsText("C:\text1.txt", "Dies ist ein Test")) ' Einen MD5-Hashwert als String ausgeben MessageBox.Show(ByteArrayToString(MD5HashForString("Geheimes Passwort"))) End Sub Dieser Tipp wurde bereits 12.658 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats Januar 2025 Dieter Otter Zeilen einer MultiLine-TextBox ermitteln (VB.NET) Dieser Zipp zeigt, wie man die Zeilen einer MultiLine-TextBox exakt so ermitteln kann, wie diese auch in der TextBox dargestellt werden. Neu! sevCommand 4.0 Professionelle Schaltflächen im modernen Design! Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |