Dateien suchen

  • VB.NET

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von HDebus.

    Hallo. ErfinderdesRades,

    natürlich erwarte von Dir, dass du mich nun durch die Mangel nimmst :=))))



    Aber hier der Code (ich glaube auch überwiegend von Dir, habe mit aber code 1 und diesen durchgelesen mit Deinen Anmerkungen und es dann soweit auch verstanden :=) )

    VB.NET-Quellcode

    1. Private Sub btfind_first_Click(sender As System.Object, e As System.EventArgs) Handles btfind_first.Click
    2. GetFilesAndFolders("C:\")
    3. End Sub
    4. Private Sub GetFilesAndFolders(ByRef rootpath As String)
    5. Dim rootDirs = {New DirectoryInfo(rootpath)}
    6. Dim fi = FindFile(rootDirs, "Dateiname.exe")
    7. 'Dim Pfad As String
    8. If fi Is Nothing Then MessageBox.Show("Datei nicht vorhanden")
    9. End Sub
    10. Private Function FindFile(ByRef rootDirs As IEnumerable(Of DirectoryInfo), ByVal pattern As String) As FileInfo
    11. Dim fi As FileInfo = Nothing
    12. Dim recurse As Action(Of IEnumerable(Of DirectoryInfo)) = _
    13. Sub(dirs As IEnumerable(Of DirectoryInfo))
    14. For Each dirinf In dirs
    15. Try
    16. fi = dirinf.EnumerateFiles(pattern).FirstOrDefault
    17. If fi IsNot Nothing Then Return
    18. Catch ex As UnauthorizedAccessException
    19. Continue For
    20. End Try
    21. recurse(dirinf.EnumerateDirectories)
    22. If fi IsNot Nothing Then Return
    23. Next
    24. End Sub
    25. recurse(rootDirs)
    26. Return fi
    27. End Function


    Holger
    Oh - das ist sehr gut!! :thumbsup:
    Du hast die Collectoren rausgeworfen, logisch - weil du sie für deinen Zweck nicht brauchst.
    Ausserdem hast du den Algo angepasst, sodass er nun beim ersten Treffer abbricht - ist ja auch Blödsinn, dann noch weiter zu rödeln.
    Und diese Anpassung ist garnet so trivial - rekursive Funktionen können ja nicht einfach abbrechen, sondern müssen aus allen Selbst-Aufrufen ebenfalls returnen.

    Einzig komisch finde ich, dass du "Dateiname.exe" noch immer festverdrahtet hast - was willst du tun, wenn du mal eine andere Datei suchst? ;)

    Ach - der Name GetFilesAndFolders lügt jetzt (Nomen est lügendes Omen!), und ByRef sollte man nur anwenden, wenn man einen wirklich wirklich triftigen Grund dafür hat.

    Und eiglich kann man die beiden Methoden nun auch zusammenlegen, odr?

    VB.NET-Quellcode

    1. Private Function FindDateiNameExe(rootpath As String) As FileInfo
    2. Dim rootDirs = {New DirectoryInfo(rootpath)}
    3. Dim pattern = "Dateiname.exe"
    4. Dim fi As FileInfo = Nothing
    5. Dim recurse As Action(Of IEnumerable(Of DirectoryInfo)) = _
    6. Sub(dirs As IEnumerable(Of DirectoryInfo))
    7. For Each dirinf In dirs
    8. Try
    9. fi = dirinf.EnumerateFiles(pattern).FirstOrDefault
    10. If fi IsNot Nothing Then Return
    11. Catch ex As UnauthorizedAccessException
    12. Continue For
    13. End Try
    14. recurse(dirinf.EnumerateDirectories)
    15. If fi IsNot Nothing Then Return
    16. Next
    17. End Sub
    18. recurse(rootDirs)
    19. Return fi
    20. End Function
    Dabei ist mir jetzt aufgefallen, dass du Option Strict Off proggst.
    Mit Strict Off-Proggern rede ich aber garnet (ausser, um ihnen zu sagen, sie solle Strict On machen oder c# lernen)
    Weil das ist mir zu dumm, u.U. endlos nach deren Blöd-Fehlern zu suchen.

    Also folge bitte bitte dem Link aus post#22, und mach dir die Mühe, das umzusetzen.

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