Directory.GetFiles etc..

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von LaMiy.

    Directory.GetFiles etc..

    Hallo ich versuche mir Dateien in einer Listbox aufzulisten.
    Aber:

    VB.NET-Quellcode

    1. vDim lb As ListBox = ListBox1
    2. lb.Items.Add(Directory.GetDirectories("C:\"))

    Dieser Code klappt nicht in ListBox1 steht nur:

    Quellcode

    1. StringArray[]


    Mit:

    VB.NET-Quellcode

    1. lb.Items.Add(Directory.GetFileSystemEntries("C:\"))

    geht es auch nicht.

    Woran liegt das?
    Hey,

    die Methode ".Add" benötigt ein Objekt, welches zur Listbox hinzugefügt werden soll, die Methode ".AddRange" hingegen erwartet eine Objekt-Kollektion (also mehrere Objekte). Weil ".GetDirectories" eine Zusammenstellung als Rückgabe hat, passt ".AddRange" wohl eher. Also z.B. so:

    VB.NET-Quellcode

    1. ListBox1.Items.AddRange(System.IO.Directory.GetDirectories("C:\"))

    Gruß, Manschula
    Danke ich habe es hinbekommen :) Woher wusstest du was ich vorhabe? :D

    So ich habe nun den Code zum Anzeigen der Dateien.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Try
    2. Dim di As New DirectoryInfo("c:\")
    3. Dim diArr As DirectoryInfo() = di.GetDirectories()
    4. Dim dri As DirectoryInfo
    5. For Each dri In diArr
    6. ListBox1.Items.Add(dri.Name)
    7. Next dri
    8. Catch ex As Exception
    9. MsgBox(ex.Message)
    10. End Try


    Jetzt will ich aber wenn ich ein Item selectiere (einen Ordner anklicke), er mir auflistet welche Dateien in diesem Ordner sind.
    Das mache ich hiermit:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
    2. Try
    3. Dim di As New DirectoryInfo("c:\" & ListBox1.SelectedItem & "\")
    4. Dim diarr As DirectoryInfo() = di.GetDirectories()
    5. Dim dri As DirectoryInfo
    6. For Each dri In diarr
    7. ListBox1.Items.Add(dri.Name)
    8. Next dri
    9. Catch ex As Exception
    10. MsgBox(ex.Message)
    11. End Try
    12. End Sub


    Das klappt auch (nur werden die Items untendran gehängt, das will ich eig. nicht)
    Aber wenn ich jetzt wieder einen Ordner anklicke, dann kommt (wegen dem MsgBox(ex.Message)) der Fehler:
    c:\******* kann nicht gefunden werden, was natürlich logisch ist, weil ich den Pfad so zusammensetzte:

    VB.NET-Quellcode

    1. ("c:\" & ListBox1.SelectedItem & "\")

    Wie kriege ich es hin, dass ich dann auch zwei Ordner anklicken kann?
    (z.B C:\Programme\Test)
    LG
    @SystemUnknow

    Edit: Danke @Manschula, sehr hilfreich :)
    Gib Deinem Projekt bitte Option Strict On.

    LaMiy schrieb:

    Das klappt auch (nur werden die Items untendran gehängt, das will ich eig. nicht)
    Genau das machst Du mit dieser Codezeile:

    VB.NET-Quellcode

    1. ListBox1.Items.Add(dri.Name)
    Genau dies ist der Fehler Deines 2. Problems. Eer zeigt ursprünglich Verzeichnisse an, sekundär die Files. Wenn Du dann auf einen File klickst, kommt der Fehler.
    Du musst die SelectedIndexChanged-Ausgabe in eine zweite Listbox schreiben, dann funktioniert alles.
    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!
    Sicher ist das möglich aber auch arbeitsaufwändig.
    Dann müsstest Du zunächst untersuchen, ob Du auf einen File oder ein Verzeichnis klickst und dementsprechend reagieren.
    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!