Guten Abend Zusammen,
seit ein paar Wochen schaue ich mir jetzt schon VB.net an und bin aktuell an einem kleinen Problem hängen geblieben.
Es geht dabei um folgendes: Das (Test-)Programm soll lediglich den SHA1 Hash einer Datei berechnen.
Soweit eigentlich kein Problem, jedoch wird es problematisch wenn das Programm den Hash von bis zu 20 GB großen Dateien berechnen muss.
Den eigentlichen FileStream habe ich schonmal in einen eigenen Thread gepackt. (das es nicht zu Hängern kommt) Nun würde ich gerne den Vortschritt der SHA1 Berechnung in einer Progressbar anzeigen.
Code bis jetzt:
Imports
Public Class Form1
Spoiler anzeigen
Form1
In der ersten Zeile unter "Hash:" wird der SHA1 Hash angezeigt, sobald dieser fertig ist.
In der zweiten Zeile unter "Hash:" wird die InsDateigröße der zu Scannenden Datei ausgegeben, allerdings erst wenn der Hash berechnet wurde.
Die Progressbar hat momentan noch keine Funktion.
Ein Codebeispiel wie man das bereits vorhandene ergänzen müsste bzw. wie man per StreamReader o.ä. den FileStream auslesen kann (auch bei großen Dateien) wäre sehr hilfreich!
Bzw. wie man die ausgelesenen Daten aus dem Thread in die Progressbar bekommt.
MfG, FireEmerald
seit ein paar Wochen schaue ich mir jetzt schon VB.net an und bin aktuell an einem kleinen Problem hängen geblieben.
Es geht dabei um folgendes: Das (Test-)Programm soll lediglich den SHA1 Hash einer Datei berechnen.
Soweit eigentlich kein Problem, jedoch wird es problematisch wenn das Programm den Hash von bis zu 20 GB großen Dateien berechnen muss.
Den eigentlichen FileStream habe ich schonmal in einen eigenen Thread gepackt. (das es nicht zu Hängern kommt) Nun würde ich gerne den Vortschritt der SHA1 Berechnung in einer Progressbar anzeigen.
Code bis jetzt:
Imports
Public Class Form1
VB.NET-Quellcode
- Public Class Form1
- Private thrSHA1Hash As Thread
- Dim GlobalResult As String
- Dim GlobaleDateilänge As Double
- Dim sFile As String
- Private Sub btnGetFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetFile.Click
- Dim MyOpenFileDialog As New OpenFileDialog()
- If MyOpenFileDialog.ShowDialog() = DialogResult.OK Then
- TextBox1.Text = MyOpenFileDialog.FileName.ToString()
- End If
- End Sub
- Private Sub btnCheck_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCheck.Click
- sFile = TextBox1.Text
- thrSHA1Hash = New Threading.Thread(AddressOf SHA1FileHash)
- thrSHA1Hash.Start()
- Timer1.Enabled = True
- End Sub
- Private Sub SHA1FileHash()
- Dim SHA1 As New SHA1CryptoServiceProvider
- Dim Hash As Byte()
- Dim Result As String = ""
- Dim Tmp As String = ""
- Dim FN As New FileStream(sFile, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
- Dim SHA1StreamReader As StreamReader = New StreamReader(FN)
- Dim Dateilänge As Double = Double.Parse(SHA1StreamReader.ReadToEnd.Length) ''Bringt bei größeren Dateien: Eine nicht behandelte Ausnahme des Typs "System.OutOfMemoryException" ist in mscorlib.dll aufgetreten.
- 'Dim AktuelleStelle As Integer = MD5StreamReader.Read.ToString Double.Parse(MD5StreamReader.ReadToEnd()) 'So etwas in die Richtung...
- GlobaleDateilänge = Dateilänge
- SHA1.ComputeHash(FN)
- FN.Close()
- Hash = SHA1.Hash
- For i As Integer = 0 To Hash.Length - 1
- Tmp = Hex(Hash(i))
- If Len(Tmp) = 1 Then Tmp = "0" & Tmp
- Result += Tmp
- Next
- GlobalResult = Result
- End Sub
- Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 'TimerInterval = 500
- 'If (Not thrMD5Hash.IsAlive) Then
- TextBox2.Text = GlobalResult
- TextBox3.Text = GlobaleDateilänge
- 'Timer1.Enabled = False
- 'End If
- End Sub
- End Class
Form1
In der ersten Zeile unter "Hash:" wird der SHA1 Hash angezeigt, sobald dieser fertig ist.
In der zweiten Zeile unter "Hash:" wird die InsDateigröße der zu Scannenden Datei ausgegeben, allerdings erst wenn der Hash berechnet wurde.
Die Progressbar hat momentan noch keine Funktion.
Ein Codebeispiel wie man das bereits vorhandene ergänzen müsste bzw. wie man per StreamReader o.ä. den FileStream auslesen kann (auch bei großen Dateien) wäre sehr hilfreich!
Bzw. wie man die ausgelesenen Daten aus dem Thread in die Progressbar bekommt.
MfG, FireEmerald