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.788 mal aufgerufen.
Anzeige
![]() ![]() ![]() 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. |
Neu! sevCoolbar 3.0 ![]() Professionelle Toolbars im modernen Design! Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Tipp des Monats ![]() Dennis Hemken Computer der gegenwärtigen Domäne auslesen Alle Namen der Computer der gegenwärtigen Domäne (LDAP) auslesen TOP Entwickler-Paket ![]() TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR... |
||||||||||||||||
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. |