rekrusive Datensuche

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von tt-Studios.

    rekrusive Datensuche

    hallo habe das problem das ich einen pfad einer datei in ein label haben will aber bekomme dieses nicht gebacken weil er immer als fehler das ausgibt:
    Der Wert vom Typ "System.Collections.Generic.List(Of System.IO.FileInfo)" kann nicht in "String" konvertiert werden. C:\Users\Kevin\Desktop\RecursiveFilesearch\RecursiveFilesearch\RecursiveFilesearch\frmRecursiveFilesearch.vb 36 23 RecursiveFilesearch


    hoffe einer weis woran es liegt.
    ps der rekrusive code ist nicht von mir geschrieben :)



    rekrusive suche

    VB.NET-Quellcode

    1. Private Sub CollectFilesAndFolders(ByVal rootDirs As IEnumerable(Of DirectoryInfo), _
    2. ByVal folderCollector As ICollection(Of DirectoryInfo), _
    3. ByVal fileCollector As ICollection(Of FileInfo), _
    4. Optional ByVal pattern As String = "*.*")
    5. 'Vorrausdeklaration der rekursion
    6. Dim recurse As Action(Of IEnumerable(Of DirectoryInfo)) = Nothing
    7. 'rekursion ausprogrammieren
    8. recurse = Sub(dirs As IEnumerable(Of DirectoryInfo))
    9. For Each dirinf In dirs
    10. Dim files As IEnumerable(Of FileInfo)
    11. Try
    12. files = dirinf.EnumerateFiles(pattern)
    13. Catch ex As UnauthorizedAccessException
    14. 'für manche Directories hat das Prog keine Rechte
    15. Continue For
    16. End Try
    17. For Each fileInf In files
    18. fileCollector.Add(fileInf)
    19. Next
    20. folderCollector.Add(dirinf)
    21. 'selbst-aufruf
    22. recurse(dirinf.EnumerateDirectories)
    23. Next
    24. End Sub
    25. 'rekursion aufrufen
    26. recurse(rootDirs)
    27. End Sub


    ausgabe

    VB.NET-Quellcode

    1. Private Sub GetFilesAndFolders(ByVal rootPath As String)
    2. Dim folders As New List(Of DirectoryInfo)
    3. Dim files As New List(Of FileInfo)
    4. Dim files1 As New List(Of FileInfo)
    5. Dim rootDirs = {New DirectoryInfo(rootPath)} 'rootDirs enthält hier nur 1 Directory
    6. CollectFilesAndFolders(rootDirs, folders, files1, "CCleaner64.exe")
    7. 'Collect-Ergebnisse verwenden
    8. ' lstDirectories.DataSource = folders
    9. ' Label1.Text= (rootDirs, folders, files, "firefox.exe")
    10. Label1.Text = files1
    Ja, ist doch klar. Du kannst doch nicht einfach ne Liste als string in ein label laden.

    VB.NET-Quellcode

    1. For Each s As IO.FileInfo In xlist
    2. MessageBox.Show(s.Directory.ToString)
    3. Next
    4. 'Denke zumindest das es so geht.
    CollectFilesAndFolders heißt "Sammle Dateien und Ordner". Und es bekommt einen Parameter "folderCollector", wo die Ordner hineingesammelt werden, und einen Parameter "fileCollector".
    Wenn du also aufrufst

    VB.NET-Quellcode

    1. CollectFilesAndFolders(rootDirs, folders, files1, "CCleaner64.exe")
    , dann sind mehrere FileInfo-Objekte in files1, wie Rinecamo auch schon sagt.

    files1 ist eine List(Of FileInfo), auf deutsch: eine Liste von FileInfo-Objekten.

    Auf einem Label kann man aber nur einen String anzeigen.

    Nur einen! (nicht mehrere)
    Nur einen String! (nicht ein FileInfo)

    Was kann nun sinnvoll sein? Natürlich nur das Anzeigen des Namens eines FileInfos. Oder des FullNames.

    VB.NET-Quellcode

    1. Label1.Text = files1(0).Fullname
    Klar macht es nicht so den Sinn aber ich will aus den Pfad mir dann die dateiversion ausgeben lassen und ich habe keine passende Methode gefunden mir die passende zeile aus der listbox zu suchen und die dann zu nehmen ohne die anklicken zu müssen
    warum willst du eine "passende zeile aus einer listbox" suchen?
    such ein passendes FileInfo aus einer List(Of FileInfo)

    Wie gesagt: bei deinem Suchmuster "CCleaner64.exe" haltichs für wahrscheinlich, dass nur ein FileInfo gefunden wird. Deshalb mein Vorschlag, files1(0).fullname anzuzeigen.

    Was meinst du mit "aus den Pfad mir dann die dateiversion ausgeben lassen"?
    Ein Pfad ist ein String, und eine dateiversion - weißichgarnet, was das ist: auch ein String? eine Nummer? ein Datum?
    Ein String ich brauche ja den Pfad der Datei damit dann die versionsnummer ausgelesen werden kann.

    Also das mit Label hat super geklappt nur ist jetzt noch ein gravierender Fehler Unzwar wenn ich mehrere Dateien suchen lassen und die alle separat in einen Label mit Pfad anzeigen lassen will und 1 Datei nicht exestiert dann werden für die anderen Dateien kein Pfad angezeigt .wo liegt da mein Fehler ?

    Edit by Manschula: Beiträge zusammengefügt

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Manschula“ ()

    verstehe die frage nicht.
    Der Such-Algo kann keine Dateien finden, die nicht existieren.

    ich weiß auch nicht recht, was du mit "mehrere Dateien suchen" meinst.
    Man kann dem Algo einen allgemeiner formulierten Pattern übergeben, mit WildCards, zB "*.txt".
    Das würde mehrere Dateien finden, nämlich alle mit Extension "txt".
    Wie gesagt: nur solche, die auch existieren.
    K war sehr dummer Fehler von mir er gibt natürlich ein Fehler raus weil die Datei nicht existiert .habe nur vergessen den exception Fehler abzufangen ;)
    K das abfangen stellt sich als relativ blöd raus es kommt immer der Fehler:
    Der Inhalt lag außerhalb des Bereiches er muss nicht negativ und kleiner als die Auflistung sein.
    Parametername: Index

    Will den mit Cache ex As Argumentoutofrangeexception abfangen aber Kriege es nicht gebacken :(

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