Funktion benutzen

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Funktion benutzen

    Guten,
    Ich verstehe das mit den Funktionen nicht.
    Hier mal ein Beispiel:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. End Sub
    4. Public Function GetMD5FromFile(ByVal sFile As String) As String
    5. ' MD5-Hash einer Datei ermitteln
    6. ' Hierzu wird der Inhalt der Datei als "Stream"
    7. ' übergeben.
    8. Dim MD5 As New MD5CryptoServiceProvider
    9. Dim oStream As New FileStream(sFile, FileMode.Open, _
    10. FileAccess.Read, FileShare.Read, 4096)
    11. MD5.ComputeHash(oStream)
    12. oStream.Close()
    13. ' als Ergebnis erhalten wir ein Byte-Array, das
    14. ' mittels der BitConverter-Klasse in einen String
    15. ' konvertiert wird.
    16. Return BitConverter.ToString(MD5.Hash)
    17. End Function
    18. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    19. Dim Datei = OpenFileDialog1.ShowDialog
    20. Datei = MD5.Hash(Datei)
    21. TextBox1.Text = Datei
    22. End Sub
    23. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    24. End Sub
    25. End Class


    Der Code ist falsch.
    Ich möchte, das ich eine Datei auswähle, und die Funktion benutze, und diese gibt mit dann den MD5Hash in der Textbox.
    Kann mit jemand das genauer erklären?
    Danke

    Darkwarf

    Darkwarf schrieb:

    und diese gibt mit dann den MD5Hash in der Textbox.
    Beschreibe zunächst ganz genau, was ühaupt und womit gemacht werden soll.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    xtts02 schrieb:

    Der Rückgabewert der Methode ShowDialog ist vom Typ DialogResult (siehe msdn.microsoft.com/de-de/libra…alogresult(v=vs.110).aspx). Demnach ist die Variable Datei kein Pfad zu einer Datei, was bei der GetMD5FromFile-Methode erforderlich ist.
    Was du brauchst ist die Eigenschaft FileName von dem OpenFileDialog.


    mhm..
    Ich hab es jetzt geändert und auch Option Strict On gemacht

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Text
    3. Imports System.Security.Cryptography
    4. Public Class Form1
    5. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    6. End Sub
    7. Public Function GetMD5FromFile(ByVal sFile As String) As String
    8. ' MD5-Hash einer Datei ermitteln
    9. ' Hierzu wird der Inhalt der Datei als "Stream"
    10. ' übergeben.
    11. Dim MD5 As New MD5CryptoServiceProvider
    12. Dim oStream As New FileStream(sFile, FileMode.Open, _
    13. FileAccess.Read, FileShare.Read, 4096)
    14. MD5.ComputeHash(oStream)
    15. oStream.Close()
    16. ' als Ergebnis erhalten wir ein Byte-Array, das
    17. ' mittels der BitConverter-Klasse in einen String
    18. ' konvertiert wird.
    19. Return BitConverter.ToString(MD5.Hash)
    20. End Function
    21. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    22. Dim sFile As String = OpenFileDialog1.FileName
    23. Dim textboxtext As String = GetMD5FromFile(sFile)
    24. TextBox1.Text = textboxtext
    25. End Sub
    26. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    27. End Sub
    28. End Class


    Wo ist jetzt der Fehler?
    Weil sobald ich eine Datei auswähle stürzt es ab und sagt es kann "OpenFileDialog1" nicht finden?

    MfG
    Als erstes solltest du dir erstmal ein OpenFileDialog erstellen

    VB.NET-Quellcode

    1. Dim ofd As New OpenFileDialog


    Nachdem du das gemacht hast, solltest du das ganze öffnen

    VB.NET-Quellcode

    1. ofd.showdialog()


    Da ich das ganze allerdings immer für etwas unsauber halte, fange ich das Resultat erstmal ab um zu Prüfen was überhaupt gemacht wurde

    VB.NET-Quellcode

    1. If p.ShowDialog = Windows.Forms.DialogResult.OK Then
    2. 'Mach was
    3. else
    4. messagebox.show("Sie müssen schon eine Datei auswählen")
    5. exit sub
    6. End If


    Okay, Was wollen wir nun haben? Den Pfad zur datei:

    VB.NET-Quellcode

    1. dim FilePath as string = ofd.FileName


    und zum schluss führst du die Funktion aus und übergibst dabei besagten Pfad:

    VB.NET-Quellcode

    1. GetMD5FromFile(FilePath)


    Da eine Funktion etwas zurückgibt, kannst du das erhaltene in einer Variable Speichern.
    Da es sich in diesem Fall um einen Hash vom Typ String handelt:

    VB.NET-Quellcode

    1. Dim FileHash as string = GetMD5FromFile(FilePath)

    Und damit kannste dann machen was du willst

    PS: Achte auf die C&P Bremse ;)
    Viele Frauen kamen, viele sind gegangen, eine ist geblieben 12.5.12 <3 ich liebe dich Schatz :love: :love:
    Oder einfach so:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Using dlg = New OpenFileDialog
    3. If dlg.ShowDialog <> Windows.Forms.DialogResult.OK Then
    4. Return
    5. End If
    6. TextBox1.Text = GetMD5FromFile(dlg.FileName)
    7. End Using
    8. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ja, geht auch, aber gugge Tut - es geht noch kürzer:

    VB.NET-Quellcode

    1. Private Sub btColor_Click(sender As Object, e As EventArgs) Handles btColor.Click
    2. If ColorDialog1.ShowDialog(Me) <> Windows.Forms.DialogResult.OK Then Return
    3. FlowLayoutPanel2.BackColor = ColorDialog1.Color
    4. End Sub
    und hat so noch den klein Vorzug, dass der gewählte Wert im Dialog erhalten bleibt (weil halt der Dialog erhalten bleibt).