"ToArray" ist kein Member von "System.Array".

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

    "ToArray" ist kein Member von "System.Array".

    Hallo

    Ich habe aus einen Visual Basic Tutorial (YouTube - Video Tutorial) einen Code 1:1 übernommen, aber was bei der Person funktioniert die im Video ist, zeigt er mir eine Fehlermeldung.

    Hier schreibt er das:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim OFD As New OpenFileDialog
    3. OFD.Multiselect = True
    4. If OFD.ShowDialog = Windows.Forms.DialogResult.OK Then
    5. Dim AllePfade As Array = OFD.FileNames.ToArray
    6. Me.ListBox1.Items.AddRange(AllPath)
    7. End If
    8. End Sub


    Aber wenn ich das schreibe, wird ToArray unterstrichen und es heißt: "ToArray" ist kein Member von "System.Array".

    Ich probiere daran jetzt schon 10 Min. aber ich komme einfach auf keine Lösung .. Könnt ihr mir da weiterhelfen? ?(
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Machs einfach so:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim OFD As New OpenFileDialog
    3. OFD.Multiselect = True
    4. If OFD.ShowDialog = Windows.Forms.DialogResult.OK Then
    5. Me.ListBox1.Items.AddRange(OFD.FileNames)
    6. End If
    7. End Sub

    Das mit dem Array ist sowieso ziemlicher Ranz.
    Intellisense sagt Dir doch, welcher Typ zurückgegeben wird... Du bekommst ein StringArray zurück und es ist absolut nicht nötig, das noch in ein Array zu wandeln. Also keep it simple:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Using oFD As New OpenFileDialog
    4. If oFD.ShowDialog = Windows.Forms.DialogResult.OK Then
    5. Dim all() As String = oFD.FileNames
    6. End If
    7. End Using
    8. End Sub
    9. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    @vb-checker
    "Array" ist die Basisklasse aller Arrays. Dieser Typ ist für die CLR, um Arrays als Klasse darzustellen und zu verarbeiten. In eigenen Programmen sollte man ihn nicht verwenden, da der Compiler alles übernimmt. Allerdings ist das deswegen trotzdem eine gültige Anweisung.
    Jetzt zeigt es mir nichts mehr, aber es funktioniert auch nichts mehr .. :huh:
    Ich beschäftige mich derzeit wieder mit dem MD5-Hash erzeugen.

    Hier ist einfach mal das Video:
    youtube.com/watch?v=d86SjVcpBFY&pxtry=3 (ProxiTube nötig, GEMA gesperrt)

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Security.Cryptography
    3. Public Class Form1
    4. Public Function MD5FileHash(ByVal sFile As String) As String
    5. Dim MD5 As New MD5CryptoServiceProvider
    6. Dim Hash As Byte()
    7. Dim Result As String = ""
    8. Dim TMP As String = ""
    9. Dim FN As New FileStream(sFile, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
    10. MD5.ComputeHash(FN)
    11. FN.Close()
    12. Hash = MD5.Hash
    13. For i As Integer = 0 To Hash.Length - 1
    14. TMP = Hex(Hash(i))
    15. If Len(TMP) = 1 Then TMP = "0" & TMP
    16. Result += TMP
    17. Next
    18. Return Result
    19. End Function
    20. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    21. Dim OFD As New OpenFileDialog
    22. OFD.Multiselect = True
    23. If OFD.ShowDialog = Windows.Forms.DialogResult.OK Then
    24. Dim AllPath As Array = OFD.FileNames.ToArray
    25. Me.ListBox1.Items.AddRange(AllPath)
    26. End If
    27. End Sub
    28. Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    29. Me.ListBox1.CheckForIllegalCrossThreadCalls = False
    30. Me.ListBox1.CheckForIllegalCrossThreadCalls = False
    31. Dim Total As String = ""
    32. For i As Integer = 0 To Me.ListBox1.Items.Count - 1
    33. Me.ListBox1.SelectedIndex = 1
    34. Total = "Hash von: " & Me.ListBox1.Text & ": " & MD5FileHash(Me.ListBox1.Text)
    35. Total = ""
    36. Next i
    37. End Sub
    38. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    39. Me.BackgroundWorker1.RunWorkerAsync()
    40. Me.Button2.Enabled = False
    41. End Sub
    42. Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
    43. Button2.Enabled = True
    44. Me.TextBox2.Text = Nothing
    45. Me.ListBox1.Items.Clear()
    46. End Sub


    (Code mit Fehler aus der überschrift)
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford
    Den ganzen Code, kannst Du komplett in die Tonne treten... Was ist Dein Ziel? Die MD5-Hashes der ausgewählten Dateien erzeugen?
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Und was haben wir nun gelernt?
    YT-Videos sind zum Lernen grundsätzlich nicht geeignet.
    Die vom @ErfinderDesRades: und zwei, drei anderen mal ausgenommen, allerdings eine verschwindende Minderheit.
    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!
    Es ist absolut nicht nötig, den Hash auf diese Weise zu "erzeugen". Das Framework bietet hierfür einen Einzeiler:

    VB.NET-Quellcode

    1. BitConverter.ToString(hashBytes).Replace("-", "")
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ich war grade kurz abwesend.

    @enIking1998
    Ich weiß das er den Code übernommen hat, auf die Seite bin ich auch schon mal gestoßen.

    @SpaceyX

    Was ich eigentlich erreichen möchte ist, von Dateien, deren Pfad in einer Listbox angegeben ist den MD5 Hash herauszufinden und in eine zweite Listbox zu schreiben.
    Listbox1: Pfad der Datei -> Listbox2: MD5 Hash der Datei

    Im Video wird eigentlich genau das gezeigt, was ich machen möchte (zu 80%).
    Woran ich aber die ganze Zeit scheitere ist, wie man alle MD5-Hashes schön sauber in der anderen Listbox untereinander (wie angeordnet der Pfade) auflistet.

    Das Problem:
    Ich weiß nicht, wie man alle Pfade in der Listbox durchgeht und gleichzeitig im aktuellen Pfad den Hash erzeugt und überträgt auf die anderen Listbox. :(
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Vultrax“ ()

    Leg Dir eine Klasse an, z. B. FileInfoExt. In dieser Klasse kapselst Du eine Property vom Type FileInfo und eine Property FileHash. Im Konstruktor dieser Klasse übergibst Du den Pfad und lässt Dir den Hash berechnen. Füge Deinem Projekt eine Datenquelle vom Typ FileInfoExt hinzu. Du erhälst nun eine BindingSource, welcher Du die FileInfoExt-Instanzen hinzufügst. Binde eine ListBox an die FileInfo-Property und die andere ListBox an die FileHash-Property. Und Du hast Dein Ergebnis.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ich versuche grade schon wieder ne weile (6 Stunden . . . :| ) daran rum, diesen Code:

    VB.NET-Quellcode

    1. MessageBox.Show(MD5FileHash("C:\Users\Windows\Desktop\Threads.txt"))


    Der mir den Hash einer einzelnen Datei wiedergibt in einer Messagebox, auf verschiedene Pfade in der ListBox1 anzuwenden und diese gleichzeitig in die Textbox1 zu schreiben.

    Problem:
    - Wie findet man den Namen des Listbox Items heraus? (Das wäre ja dann der Pfad der entsprechenden Datei)
    - Wie wende ich es auf alle Items an?

    Hier ist eines meiner versuche:

    VB.NET-Quellcode

    1. For Each Item As Object In Me.ListBox1.Items
    2. For i As Integer = 0 To Me.ListBox1.Items.Count - 1
    3. Me.ListBox1.SelectedIndex = 2
    4. Me.ListBox2.Items.Add(MD5FileHash(Me.ListBox1.SelectedIndex = i))
    5. Next
    6. Next


    Ich bin am verzweifeln bei dem Projekt :S
    Könnt ihr mir vielleicht sowas wie ein Code-Beispiel schreiben :) :?:

    (Die Beiträge vor diesen, habe ich berücksichtigt, allerdings kommt es immer auf das selber hinaus)
    "Denken ist die schwerste Arbeit, die es gibt. Das ist wahrscheinlich auch der Grund, warum sich so wenig Leute damit beschäftigen." - Henry Ford