Ordner und deren unterordner anzeigen

Peter86

Erfahrenes Mitglied
Hallo,
ich habe mir ein Programm geschrieben womit ich mit einem FolderBrowserDialog einen Ordner auswählen kann, wo mir dann alle Ordner und Unterordner angezeigt werden. Soweit auch einfach. Kennt jemand eine Gute lösung die unterordner der unterordner auch anzuzeigen? Und falls die unterordner auch unterordner haben die auch anzeigen. Bis es keine Unterordner mehr gibt.

Mein code
Code:
        Dim dir_list As New List(Of String)

        Dim FolderBrowserDialog1 As New FolderBrowserDialog
        With FolderBrowserDialog1
            .Description = "Select the directory"

            If .ShowDialog = DialogResult.OK Then
                dir_list.Add(.SelectedPath)
                For Each dire In Directory.GetDirectories(.SelectedPath)
                    dir_list.Add(dire)
                Next
            End If
        End With

Peter86
 
Zuletzt bearbeitet:
Versuchs mal mit Rekursion:

Code:
Dim dir_list As New List(Of String)
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim FolderBrowserDialog1 As New FolderBrowserDialog
        With FolderBrowserDialog1
            .Description = "Select the directory"
            If .ShowDialog = DialogResult.OK Then
                dir_list.Add(.SelectedPath)
                GetDirs(New DirectoryInfo(.SelectedPath))
            End If
        End With
    End Sub

    Private Sub GetDirs(ByVal oDir As DirectoryInfo)
        For Each SubDir As DirectoryInfo In oDir.GetDirectories
            dir_list.Add(SubDir.FullName)
            GetDirs(SubDir)
        Next
    End Sub
 
Danke Masterclavat, Klappt wunderbar!

EDIT: Eine sache wäre da noch. Was ist wenn ich jetzt alle Files der ordner haben will? Hab zwar ein wenig rum probiert, aber leider keine Lösung gefunden. :rolleyes:
 
Zuletzt bearbeitet:
Hi,
Damit hatte ich es schon Versucht, hab ich nur nicht hinbekommen.
Folgender Code führte zur Lösung.
Code:
        For Each _ordner In dir_list
            For Each datei In _ordner.GetFiles()

                _file_list.Add(New IO.DirectoryInfo(datei.FullName))
            Next
        Next
Bei dem mir engelmarkus geholfen hat.

Peter86
 
Hi
Ok, jedoch eine kleine Anmerkung:
DirectoryInfo.GetFiles() liefert eine FileInfo-Array zurück.
Du solltest von den Pfaden dann nicht DirectoryInfo_Objekte erzeugen. Denn wie der Name schon sagt, sind die für Verzeichnisse ;)
Du kannst also die von GetFiles gelieferten Objekt in deine Liste packen.
 
Eine sache wäre da noch. Masterclavat's Code listet zwar die Unterordner von einem Ordner auf. Was ist aber wenn die Unterordner auch noch unterordner haben? Und deren unterordner auch unterordner. Eigentlich wäre es ja nur nötig die funktion noch mal aufzurufen. Nur halt als Ordner die unterordner. Aber wie stelle ich das am besten an?

Peter86
 
Mein Code listet alle Unterordner auf, auch die der Unterordner und der Unterordner der Unterordner. ;)

Sie ruft sich solange selbst auf, bis es keine Unterordner mehr gibt. Schau dir den Code nochmal genau an. ;)
 
Stimmt. Sorry, mein fehler. Erst nachdem ich versucht habe die Files aufzulisten wurden mir nur die Files aufgelistet, die sich im Hauptordner und dem Unterordner befanden. Nicht die Files der Unterordnern der unterordner. Hat da jemand eine Lösung, das ich jede Datei, die sich im einen Ordner befindet einschliesslich unterordnern aufzulisten?
 
So?

Visual Basic:
Imports System.IO

Module Module1
    Sub Main()
        Dim startordner As New DirectoryInfo("C:\FeedReader")

        DateienAuflisten(startordner)
        Console.ReadKey()
    End Sub

    Sub DateienAuflisten(ByVal aktuellerOrdner As DirectoryInfo)
        For Each datei In aktuellerOrdner.GetFiles()
            Console.WriteLine(datei.FullName)
        Next

        For Each unterordner In aktuellerOrdner.GetDirectories()
            DateienAuflisten(unterordner)
        Next
    End Sub
End Module

Im Endeffekt musst du halt, egal was du vorhast, eine Funktion nehmen, die sich immer wieder selber aufruft, bis sie alle Ordner durch hat.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück