vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Dateisystem · Dateien lesen/schreiben   |   VB-Versionen: VB.NET21.07.06
Feststellen ob Datei aus einem bestimmten Text besteht (.NET)

Mit diesem Code lässt sich prüfen, ob eine Datei aus einem bestimmten Text besteht.

Autor:   Carsten StuplichBewertung:     [ Jetzt bewerten ]Views:  12.439 
ohne HomepageSystem:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11kein Beispielprojekt 

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.439 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Aktuelle Diskussion anzeigen (3 Beiträge)

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel