vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Dateisystem · Dateien - allgemein   |   VB-Versionen: VB.NET17.10.07
Dateien miteinander vergleichen (VB.NET)

Sind zwei Dateien identisch? Diese Frage lässt sich nicht immer beantworten, wenn man nur die reine Dateigröße miteinander vergleicht.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  22.655 
www.tools4vb.deSystem:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Um zu prüfen, ob zwei Dateien identisch sind, sollte man folgendermassen vorgehen:

  1. Vergleich der Dateigrößen
  2. Haben beide Dateien die gleiche Größe, muss der Inhalt miteinander verglichen werden

Die Funktion FileCompare erledigt genau diese Aufgabe für Sie. Das notwendige Vergleichen der Datei-Inhalte erfolgt über die jeweiligen Hash-Werte.

Rückgabewert der Funktion:

0 - Identical
1 - SizeDifferent
2 - ContentsDifferent
3 - Error

Imports System.IO
Imports System.Security.Cryptography
Private Enum FileCompareStatus
  Identical = 0         ' identisch
  SizeDifferent = 1     ' Dateigröße verschieden
  ContentDifferent = 2  ' Inhalt verschieden
  [Error] = 3           ' Fehler
End Enum
' zwei Dateien miteinander vergleichen
Private Function FileCompare(ByVal sFile1 As String, _
  ByVal sFile2 As String) As FileCompareStatus
 
  ' Prüfen, ob beide Dateien auch existieren
  If File.Exists(sFile1) AndAlso File.Exists(sFile2) Then
    Try
      ' zunächst Dateigröße vergleichen
      If New FileInfo(sFile1).Length <> New FileInfo(sFile2).Length Then
        Return FileCompareStatus.SizeDifferent
      Else
        ' jetzt Hash-Wert berechnen und vergleichen
        Dim oHash As HashAlgorithm = HashAlgorithm.Create
        Dim oStream As FileStream
 
        ' Hash-Wert für 1. Datei ermitteln
        oStream = New FileStream(sFile1, FileMode.Open)
        Dim bHash1() As Byte = oHash.ComputeHash(oStream)
        oStream.Close()
 
        ' Hash-Wert für 2. Datei ermitteln
        oStream = New FileStream(sFile2, FileMode.Open)
        Dim bHash2() As Byte = oHash.ComputeHash(oStream)
        oStream.Close()
 
        ' jetzt die beiden Hash Byte-Arrays miteinander vergleichen
        If BitConverter.ToString(bHash1) = BitConverter.ToString(bHash2) Then
          ' Datei-Inhalt ist identisch
          Return FileCompareStatus.Identical
        Else
          ' Datei-Inhalt unterscheidet sich
          Return FileCompareStatus.ContentDifferent
        End If
 
      End If
    Catch ex As Exception
      ' Fehler
      Return FileCompareStatus.Error
    End Try
  Else
    Return FileCompareStatus.Error
  End If
End Function

Um die neue Funktion gleich auszuprobieren, erstellen Sie ein neues Projekt und plazieren auf die Form einen CommandButton (Button1) und ein Label-Control (lblStatus) und fügen obigen Code in den Codeteil der Form ein.

Beim Klicken auf den CommandButton wird folgender Code ausgeführt:

Private Sub Button1_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles Button1.Click
 
  ' Hier die beiden Dateien festlegen
  Dim sFile1 As String = "c:\temp\datei1.ext"
  Dim sFile2 As String = "c:\temp\datei2.ext"
 
  Select Case FileCompare(sFile1, sFile2)
    Case FileCompareStatus.Identical
      lblStatus.Text = "Die Dateien sind identisch!"
    Case FileCompareStatus.SizeDifferent
      lblStatus.Text = "Die Dateien haben unterschiedliche Dateigrößen!"
    Case FileCompareStatus.ContentDifferent
      lblStatus.Text = "Die Dateien haben unterschiedlichen Inhalt!"
    Case FileCompareStatus.Error
      lblStatus.Text = "Fehler beim Dateivergleich!"
  End Select
End Sub

Dieser Tipp wurde bereits 22.655 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 (1 Beitrag)

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

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