NullReferenceException

  • VB.NET

Es gibt 37 Antworten in diesem Thema. Der letzte Beitrag () ist von SystemUnknow.

    NullReferenceException

    Hallo,
    ich bekomme diese blöde Meldung:

    "NullReferenceException wurde nicht behandelt"

    es ist nur das Fenster da, ohne eine hinweislinie auf iergend ein Satz im Code.
    im StackTrace wird das gemeldet:

    bei DuplicateFinder.DirectoryCrawler.FileInfoProvider.populateInfos(Object tmpfiles)
    bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    bei System.Threading.ExecutionContext.runTryCode(Object userData)
    bei System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
    bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
    bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    bei System.Threading.ThreadHelper.ThreadStart(Object obj)

    habe einiges im Forum durchgelesen aber nichts passend gefunden.
    habe mit F11 probiert, bleibt aber nirgens stehen.
    habe einiges ausgeklammert, nichts passiert, der Fehler ist immer noch da.

    Wie kann ich sonst herausfinden in welche Zeile der Fehler vorkommt?
    Wie kann ich es beheben?

    Der Code ist mit 1285 Zeilen zu lang um hier zu posten.
    Bitte dringend um Hilfe.

    lg

    toto
    lg toto
    Habe gerade erneut mit Haltepunkte.
    In diesem Bereich ist die Meldung aufgetreten:

    VB.NET-Quellcode

    1. Private Sub setText(ByVal ctrl As Control, ByVal str As String)
    2. If Me.WindowState = FormWindowState.Minimized Then
    3. Return
    4. End If
    5. If ctrl.InvokeRequired Then
    6. ctrl.BeginInvoke(New SetText(AddressOf setText), New Object() {ctrl, str})
    7. Else
    8. ctrl.Text = str
    9. End If
    10. End Sub


    Ich habe keine Fehler entdecken können.

    Kann sein das in folgendes eine erndlose Schleife habe??

    VB.NET-Quellcode

    1. Private Function SameSize(ByVal filesToCompare As FileInfo()) As FileInfo()
    2. Dim len As Integer = filesToCompare.Length
    3. Dim alIdx As New List(Of Long)()
    4. Dim HLengths As New System.Collections.Hashtable()
    5. For Each fileInfo As FileInfo In filesToCompare <---- und zwar hier
    6. If Not HLengths.Contains(fileInfo.Length) Then
    7. HLengths.Add(fileInfo.Length, 1)
    8. Else
    9. HLengths(fileInfo.Length) = CInt(HLengths(fileInfo.Length)) + 1
    10. End If
    11. Next
    12. For Each hash As DictionaryEntry In HLengths
    13. If CInt(hash.Value) = 1 Then
    14. alIdx.Add(CLng(hash.Key))
    15. setText(stsMain, String.Format("Will remove File with size {0}", hash.Key))
    16. End If
    17. Next
    18. Dim fiZ As FileInfo() = New FileInfo(len - alIdx.Count - 1) {}
    19. Dim j As Integer = 0
    20. For i As Integer = 0 To len - 1
    21. If Not alIdx.Contains(filesToCompare(i).Length) Then
    22. fiZ(System.Math.Max(System.Threading.Interlocked.Increment(j - 1), j - 1)) = filesToCompare(i)
    23. End If
    24. Next
    25. Return fiZ
    26. End Function
    lg toto

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

    wir haben uns überschnitten, habe inzwischen den Text editiert.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Collections
    2. Namespace Comparers
    3. Public Class FileListComparer
    4. Implements IComparer
    5. Private m_FirstFolder As String = String.Empty
    6. Public Function Compare(x As Object, y As Object) As Integer Implements IComparer.Compare
    7. If (x Is Nothing) AndAlso (y Is Nothing) Then
    8. Return 0
    9. Else
    10. Dim xLength As Long = DirectCast(x, System.IO.FileInfo).Length
    11. Dim yLength As Long = DirectCast(y, System.IO.FileInfo).Length
    12. Dim retval As Integer = DirectCast(x, System.IO.FileInfo).Length.CompareTo(DirectCast(y, System.IO.FileInfo).Length)
    13. Return retval
    14. End If
    15. End Function
    16. Public Sub New(firstFolder As String)
    17. m_FirstFolder = firstFolder
    18. End Sub
    19. Public Function FileNameComparer(fileInfoA As String(), fileInfoB As String()) As Integer
    20. If fileInfoA(4) & "\" & fileInfoA(0) = fileInfoB(4) & "\" & fileInfoB(0) Then
    21. Return 0
    22. End If
    23. Dim fiA As String = fileInfoA(3) & fileInfoA(4).ToLower()
    24. Dim fiB As String = fileInfoB(3) & fileInfoB(4).ToLower()
    25. If fileInfoA(3) <> fileInfoB(3) Then
    26. Return fileInfoA(3).CompareTo(fileInfoB(3))
    27. End If
    28. If fileInfoA(4).ToLower().Contains(m_FirstFolder) Then
    29. Return -1
    30. End If
    31. If fileInfoB(4).ToLower().Contains(m_FirstFolder) Then
    32. Return 1
    33. End If
    34. Return fiA(3).CompareTo(fiB(3))
    35. End Function
    36. Public Shared Function FileSizeComparer(fileA As System.IO.FileInfo, fileB As System.IO.FileInfo) As Integer
    37. Return fileA.Length.CompareTo(fileB.Length)
    38. End Function
    39. End Class
    40. End Namespace
    lg toto

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

    Hier schnell mal die classe FileList Compare

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Collections
    2. Namespace Comparers
    3. Public Class FileListComparer
    4. Implements IComparer
    5. Private m_FirstFolder As String = String.Empty
    6. Public Function Compare(x As Object, y As Object) As Integer Implements IComparer.Compare
    7. If (x Is Nothing) AndAlso (y Is Nothing) Then
    8. Return 0
    9. Else
    10. Dim xLength As Long = DirectCast(x, System.IO.FileInfo).Length
    11. Dim yLength As Long = DirectCast(y, System.IO.FileInfo).Length
    12. Dim retval As Integer = DirectCast(x, System.IO.FileInfo).Length.CompareTo(DirectCast(y, System.IO.FileInfo).Length)
    13. Return retval
    14. End If
    15. End Function
    16. Public Sub New(firstFolder As String)
    17. m_FirstFolder = firstFolder
    18. End Sub
    19. Public Function FileNameComparer(fileInfoA As String(), fileInfoB As String()) As Integer
    20. If fileInfoA(4) & "\" & fileInfoA(0) = fileInfoB(4) & "\" & fileInfoB(0) Then
    21. Return 0
    22. End If
    23. Dim fiA As String = fileInfoA(3) & fileInfoA(4).ToLower()
    24. Dim fiB As String = fileInfoB(3) & fileInfoB(4).ToLower()
    25. If fileInfoA(3) <> fileInfoB(3) Then
    26. Return fileInfoA(3).CompareTo(fileInfoB(3))
    27. End If
    28. If fileInfoA(4).ToLower().Contains(m_FirstFolder) Then
    29. Return -1
    30. End If
    31. If fileInfoB(4).ToLower().Contains(m_FirstFolder) Then
    32. Return 1
    33. End If
    34. Return fiA(3).CompareTo(fiB(3))
    35. End Function
    36. Public Shared Function FileSizeComparer(fileA As System.IO.FileInfo, fileB As System.IO.FileInfo) As Integer
    37. Return fileA.Length.CompareTo(fileB.Length)
    38. End Function
    39. End Class
    40. End Namespace
    lg toto
    Hallo Alex,
    klar der Code ist schrecklich, habe ihn teilweis vom C# übersezt und 1000 Fehler behoben.
    ich versuche es in zwei Sätze:

    es soll ein Duplikat Finder werden anhand vom MD5 Hash sollen Files verglichen werden und aussortiert.
    lg toto
    MD5 Hash eine Datei ermitteln:
    dotnet-snippets.de/dns/den-md5…atei-ermitteln-SID77.aspx
    Dateien eines Ordners aufliesten:
    vbarchiv.net/tipps/tipp_617-al…ners-ermitteln-vbnet.html
    Dateien kopieren:
    vbarchiv.net/tipps/tipp_1693-f…selber-erstellen-net.html

    - in schleife md5 hash ermitteln
    - in schleife wenn hash gleich muster, dann führe weitere aktionen aus z.b Datei kopieren

    du muß nur Quelltexte richtig zusammen fügen und an eigenen wunsch anpassen.
    @ Willy Danke für deine Hilfe.

    @Manawyrm, ist nicht blind kopiert, wie geschrieben TEILWEISE übernommen (C# übersetzt) und bei mir angepasst, Classen(Brauche ich nicht neu erfinden) troztdem Danke.

    @ Alex, die Beiträge kenne ich schon, passen bei mir nicht, Z.B. ich suche nicht anhand eines TextBox.
    aber dein Ansatz hier zu suchen
    - in schleife md5 hash ermitteln
    - in schleife wenn hash gleich muster, dann führe weitere aktionen aus z.b Datei kopieren

    du muß nur Quelltexte richtig zusammen fügen und an eigenen wunsch anpassen.


    ist schon mal gut, Danke.
    lg toto
    die Beiträge kenne ich schon, passen bei mir nicht, Z.B. ich suche nicht anhand eines TextBox.

    von textboxen oder etc habe ich nicht geschrieben, das waren nur beispiele.
    Bevor du was vergleichst brauchst du muster, spricht irgend eine datei.
    Diese Datei kannst du z.b über OpenFileDialog öffnen, MD5 Hash ermitteln, den Hash in eine Variable zwieschen speichern.
    Dann kannst in einem Verzeichnis alle Dateien oder Dateien mit bestimmte Dateiendung durchlaufen, in schleife hash ermitteln, vergleichen, dann datei verschieben, kopieren oder löschen. (siehe post von 16:44)


    EDIT// versuche es das ganze mit OOP zu lösen. (Klasse/Modul).

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „SystemUnknow“ ()