Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1551 | Anzahl registrierter User: 1841 | Besucher online: 180
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Klasse für SimpleFileVerification (SFV)


Autor: Tim Hartwig
Sprache: VB.NET
Bewertung:
noch nicht bewertet
Anzahl der Aufrufe: 9919
  
Kick it on dotnet-kicks.de  

Beschreibung:

Diese Klasse verarbeitet SFV Dateien.
Dabei wird eine SFV Datei geöffnet und es werden von allen aufgelisteten Dateien
CRC32 Summen erstellt und diese werden dann mit den Summen aus der SFV Datei vergleichen.
Bei Fehlenden, Kaputten und Sauberen Dateien wird jeweils das dazugehörige Event aufgerufen.
SFV Dateien müssen das Standardformat besitzen: "Dateiname.dat ABCD1234" wobei der CRC32 Hash
in der SFV Datei immer 8 Zeichen lang sein muss. In einigen Fällen hat ein CRC32 Hash nur 7 Zeichen,
dann sollte am Anfang des Hashes eine 0 angehängt werden also "0ABC1234" statt "ABC1234".


Abgelegt unter: SFV, CRC, CRC32, File, Datei.



Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
Imports System.IO

''' <summary>
''' Diese Klasse verarbeitet SFV Dateien.
''' Dabei wird eine SFV Datei geöffnet und es werden von allen aufgelisteten Dateien
''' CRC32 Summen erstellt und diese werden dann mit den Summen aus der SFV Datei vergleichen.
''' Bei Fehlenden, Kaputten und Sauberen Dateien wird jeweils das dazugehörige Event aufgerufen.
''' SFV Dateien müssen das Standardformat besitzen: "Dateiname.dat ABCD1234" wobei der CRC32 Hash
''' in der SFV Datei immer 8 Zeichen lang sein muss. In einigen Fällen hat ein CRC32 Hash nur 7 Zeichen,
''' dann sollte am Anfang des Hashes eine 0 angehängt werden also "0ABC1234" statt "ABC1234".
''' </summary>
''' <remarks>Geschrieben von Tim Hartwig (Januar 08)</remarks>
Public Class SimpleFileVerification
    Private mSFVFile As String

    ''' <summary>
    ''' Tritt ein wenn eine Datei in der SFV Liste aufgeführt ist, aber nicht vorhanden ist.
    ''' </summary>
    Public Event FileIsMissing(ByVal sender As Object, ByVal e As SFVEventArgs)

    ''' <summary>
    ''' Tritt ein wenn die Datei nicht die vorgegebene Prüfsumme aus der SFV Datei hat.
    ''' </summary>
    Public Event FileIsCorrupted(ByVal sender As Object, ByVal e As SFVEventArgs)

    ''' <summary>
    ''' Tritt immer ein wenn eine Datei in Ordnung ist.
    ''' </summary>
    Public Event FileIsClean(ByVal sender As Object, ByVal e As SFVEventArgs)

    ''' <summary>
    ''' Tritt ein wenn die überprüfung der aktuellen SFV Datei fertiggestellt ist.
    ''' </summary>
    Public Event Finished(ByVal sender As Object)

    ''' <summary>
    ''' Die SFV Datei in der die Prüfdaten drin stehen.
    ''' </summary>
    Public Property SFVFile() As String
        Get
            Return mSFVFile
        End Get
        Set(ByVal value As String)
            mSFVFile = value
        End Set
    End Property

    Sub New()
        CreateCRC32Table()
    End Sub

    Sub New(ByVal nSFVFile As String)
        mSFVFile = nSFVFile
        CreateCRC32Table()
    End Sub

    ''' <summary>
    ''' Beginnt die prüfung der SFV Datei.
    ''' </summary>
    Public Sub Start()
        Dim Data() As String = File.ReadAllLines(mSFVFile)
        Dim CurrExpectedHash As String = ""
        Dim CurrCalculatedHash As String = ""
        Dim CurrFileNameToCheck As String = ""
        Dim SFVFilePath As String = Path.GetDirectoryName(mSFVFile) & "\"

        For i As Integer = 0 To Data.Length - 1
            If Data(i) IsNot String.Empty And Not Data(i).StartsWith(";") Then
                CurrFileNameToCheck = SFVFilePath & Data(i).Substring(0, Data(i).Length - 9)

                If File.Exists(CurrFileNameToCheck) = False Then
                    RaiseEvent FileIsMissing(Me, New SFVEventArgs(CurrFileNameToCheck, "", ""))
                Else
                    CurrExpectedHash = Data(i).Substring(Data(i).Length - 8, 8).ToUpper.Replace(" ", "")
                    CurrCalculatedHash = ProcessFile(CurrFileNameToCheck).ToUpper

                    If CurrCalculatedHash.Length <> 8 Then CurrCalculatedHash = "0" & CurrCalculatedHash

                    If CurrExpectedHash = CurrCalculatedHash Then
                        RaiseEvent FileIsClean(Me, New SFVEventArgs(CurrFileNameToCheck, CurrExpectedHash, CurrCalculatedHash))
                    Else
                        RaiseEvent FileIsCorrupted(Me, New SFVEventArgs(CurrFileNameToCheck, CurrExpectedHash, CurrCalculatedHash))
                    End If
                End If
            End If
        Next

        RaiseEvent Finished(Me)
    End Sub

#Region "CRC32"
    Private CRC32Table() As Integer
    Private Const CRC32Polynomial As Integer = &HEDB88320

    Public Function ProcessFile(ByVal FileName As String) As String
        Dim FS As FileStream = New FileStream(FileName, FileMode.Open, _
        FileAccess.Read, FileShare.Read, 1048576)
        Dim CRC32Result As Integer = &HFFFFFFFF
        Dim Buffer(4096) As Byte
        Dim ReadSize As Integer = 4096
        Dim Count As Integer = FS.Read(Buffer, 0, ReadSize)
        Dim Lookup As Integer

        Do While (Count > 0)
            For i As Integer = 0 To Count - 1
                Lookup = (CRC32Result And &HFF) Xor Buffer(i)
                CRC32Result = ((CRC32Result And &HFFFFFF00) \ &H100) And &HFFFFFF
                CRC32Result = CRC32Result Xor CRC32Table(Lookup)
            Next i
            Count = FS.Read(Buffer, 0, ReadSize)
        Loop

        Return Hex(Not (CRC32Result)).ToString
    End Function

    Private Sub CreateCRC32Table()
        Dim DWCRC As Integer
        ReDim CRC32Table(256)

        For i As Integer = 0 To 255
            DWCRC = i
            For n As Integer = 8 To 1 Step -1
                If (DWCRC And 1) Then
                    DWCRC = ((DWCRC And &HFFFFFFFE) \ 2&) And &H7FFFFFFF
                    DWCRC = DWCRC Xor CRC32Polynomial
                Else
                    DWCRC = ((DWCRC And &HFFFFFFFE) \ 2&) And &H7FFFFFFF
                End If
            Next
            CRC32Table(i) = DWCRC
        Next i
    End Sub
#End Region
End Class

Public Class SFVEventArgs
    Private mFileName As String
    Private mExpectedHash As String
    Private mCalculatedHash As String

    Public Property FileName() As String
        Get
            Return mFileName
        End Get
        Set(ByVal value As String)
            mFileName = value
        End Set
    End Property

    Public Property ExpectedHash() As String
        Get
            Return mExpectedHash
        End Get
        Set(ByVal value As String)
            mExpectedHash = value
        End Set
    End Property

    Public Property CalculatedHash() As String
        Get
            Return mCalculatedHash
        End Get
        Set(ByVal value As String)
            mCalculatedHash = value
        End Set
    End Property

    Sub New(ByVal nFileName As String, ByVal nExpectedHash As String, ByVal nCalculatedHash As String)
        mFileName = nFileName
        mExpectedHash = nExpectedHash
        mCalculatedHash = nCalculatedHash
    End Sub
End Class
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)



Diese Snippets könnten für Sie interessant sein:
[C#] CRC32 - Checksumme einer Datei berechnen
[C#] CRC32 einer Datei
[C#] CRC32-Hash eines Strings
[VB.NET] CRC32-Hash eines Strings
[VB.NET] CRC32 Hash einer Datei berechnen
[VB.NET] Hash Validator Klasse
[VB.NET] Prüfen ob Datei gerade benutzt wird
[C#] Abfragen ob eine Datei existiert
[VB.NET] Sich selbst löschende Anwendung
[C#] Datei umbenennen
[C#] File Owner / File Besitzer
[VB.NET] File Owner / File Besitzer
[C#] Generisches, komprimiertes, deserialisieren von Objekten
[VB.NET] Klasse für Dateisuche
[C#] LogWriter klasse
[C#] Datei-Eigenschaften zeigen (Eigenschaften-Fenster)
[C#] Prüfen, ob eine Datei ausfürbar ist (.exe, .bat, etc.)
[C#] eindeutigen Dateinamen ermitteln
[C#] Loads an embedded resource file of the calling assembly.
[ASP.net] Message in Logfile schreiben
[C#] Dateien und Ordner rekursiv löschen
[C#] Herausfinden welches Programm ein bestimmtes Dokument öffnet
[VB.NET] Gibt das Bytearray einer Datei zurück
[VB.NET] Erstellt aus einem Bytearray eine Temporäre Datei
[C#] Laden und speichern von komprimierten Binärdaten
[C#] Datei im Windows-Explorer anzeigen und markieren
[C#] Dateilisten kopieren
[C#] File Container
[C#] PDF Dateien erstellen
[VB.NET] File List
[C#] SystemIconsImageListWrapper
[C#] Temporäre Datei mit using einfach nutzen/verwalten
[VB.NET] Datei im Explorer anzeigen und markieren
[C#] Datei anlegen
[C#] Aktuelles Verzeichnis auslesen
[VB.NET] Den MD5 Hash einer Datei ermitteln
[VB.NET] Datei mittels Windows Dialog löschen
[VB.NET] Datei mittels Windows Dialog verschieben
[VB.NET] Datei mittels Windows Dialog kopieren
[VB.NET] Den SHA1 Hash einer Datei ermitteln
[C#] Dateien in die Zwischenablage kopieren
[ASP.net] Textdatei zum Download anbieten
[C#] MD5-Hash von Dateien ermitteln
[C#] Arraylist in Textdatei schreiben
[C#] Textdatei in Arraylist speichern
[C#] SHA-1 Hash einer Datei erzeugen
[VB.NET] Datei Paketweise Kopieren
[ASP.net] Datei nach Bildupload prüfen
[C#] Dateien suchen mit LINQ
[C#] Datei/Ordner durch Erweiterungsmethoden abfragen
[C#] CSV Dateien schreiben
[C#] Create Nice File Size in C#
[VB.NET] Programmpfad mittels Erweiterung ermitteln in VB
[VB.NET] Dateien nach Datum sortieren
[C#] CSV und XML-Datei Datenbank-Import (incl. valid-check)
[VB.NET] wie in der CMD Pfad zu Datei ermitteln anhand des EXE-namens
[C#] Anzahl der Dateien in einem Ordner ermitteln
[VB.NET] Dateigröße als formatierter String
[VB.NET] Alle Dateien eines Ordners auflisten
[VB.NET] Den kurzen Pfad einer Datei ermitteln (8.3 Format)
[C#] Erzeugen eines zufälligen Strings
[VB.NET] Dummy Datei erstellen
[C#] Datei in Papierkorb verschieben
[C#] Zeilen einer Datei zählen
[C#] Schreibschutz einer Datei setzen / entfernen
[ASP.net] Eine Datei zum Download anbieten
[VB.NET] Prüfen ob Dateiattribut vorhanden ist
[VB.NET] Bestimmtes Dateiattribut entfernen
[VB.NET] Datei ein bestimmtes Attribut geben
[VB.NET] Prüfen ob Datei eine EXE Datei ist
[C#] Alle Dateien eines Ordners auflisten - C# Version -
[VB.NET] Datei-Inhalt anzeigen
[C#] Stream in Datei umleiten
[C#] Ordnergröße ermitteln
[C#] Automatisches Umbenennen eines Pfades
[C#] Kapazität mit Einheit darstellen
[C#] MIMETypeManager
[C#] externes Programm aufrufen (andere Version) mit Parameter
[C#] Datei ein bestimmtes Attribut geben/setzen
[C#] Datei einlesen und als ArrayList jede Zeile zurückliefern
[C#] Parallele Dateisuche über mehrere Laufwerke
[C#] Byte Größenangaben als String formatieren (KB, MB, GB, ...)
[C#] Textdatei einlesen auf verschiedene Arten
[C#] Datei Teilweise einlesen (gestückelt)
[C#] Bestimmte Zeile einer Datei löschen
[C#] Ist Datei beschreibbar
[C#] Sichern einer MS-SQLServer Datenbank aus C#
[C#] Datei mi GZip packen
[C#] ini Datei anlegen - mit Dictionary
[C#] Dummy Files erzeugen. ( Mit Inhalt )
[C#] Byte-Array in Struktur kopieren
[C#] Text in Textdateien suchen
[VB.NET] Prüfen, ob eine Datei überschrieben werden kann

schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.