Um alle Ordner und Unterordner eines bestimmten Laufwerks oder Verzeichnisses zu ermitteln, kann man verschiedene Wege gehen. Man könnte dir Dir()-Funktion verwenden oder auch auf die API-Funktionen FindFirstFile und FindNextFile zurückgreifen. Eine weitere Möglichkeit wäre die DirListBox herzunehmen und die Einträge auszulesen, wobei man dann immer in evtl. vorhandene Unterverzeichnisse wechseln müsste usw. Man kann aber auch das FileSystemObject verwenden. Dieses ist Bestandteil der Microsoft Scripting Runtime DLL (scrrun.dll). Und genau diese Variante wollen wir wählen. Zunächst muss man dem Projekt die besagte DLL als Verweis hinzufügen (über "Projekt - Verweise"). Per Set FSO = New FileSystemObject wird das FileSystemObject instanziert. Nachdem man den Startordner (kann natürlich auch das Rootverzeichnis eines Laufwerks sein) festgelegt hat, gibt uns die SubFolders-Eigenschaft Auskunft darüber, ob sich innerhalb des Ordners weitere Unterordner befinden. Wenn ja, dann durchlaufen wir einfach alle SubFolders und prüfen erneut, ob es wiederum weitere Unterordner gibt. Da wir die Verzeichnistiefe ja nicht kennen, muss man in diesem Fall eine rekursive Funktion verwenden. Unter einer solchen Funktion versteht man eine Funktion, welche sich immer wieder selbst aufruft - solange, bis eine Abbruch-Bedingung erfüllt wird. In unserem Fall also, bis es keine weiteren Unterordner innerhalb eines Ordners gibt. Das nachfolgende Codebeispiel ermittelt alle Ordner und Unterordner eines beliebigen Startverzeichnisses und schreibt diese in eine ListBox. Erstellen Sie ein neues Projekt, setzen einen Verweis auf die Microsoft Scripting Runtime-DLL und plazieren auf die Form ein DriveList-Control (Drive1), einen CommandButton (cmdGO), sowie eine ListBox (List1). Beim Klicken auf den CommandButton werden dann alle Verzeichnisse des in der DriveList ausgewählten Laufwerks ermittelt und in der ListBox angezeigt. Und hier der Code: Option Explicit Dim FSO As FileSystemObject Private Sub cmdGO_Click() Dim sPath As String ' Alle Unterverzeichnisse lesen und in einer ' ListBox anzeigen List1.Clear ' FileSystemObject initialisieren Set FSO = New FileSystemObject ' Start-Ordner Screen.MousePointer = vbHourglass sPath = Left$(Drive1.Drive, 2) FSO_GetAllFolders List1, sPath Screen.MousePointer = vbNormal End Sub ' Rekursive Funktion zum Ermitteln aller ' Ordner und Unterordner Private Sub FSO_GetAllFolders(Liste As ListBox, _ ByVal sPath As String) Dim Folder As Folder Dim SubFolder As Folder ' Ggf. abschliessenden Backslash anfügen If Right$(sPath, 1) <> "\" Then sPath = sPath & "\" Set Folder = FSO.GetFolder(sPath) Liste.AddItem sPath ' Ggf. Fehler "Zugriff verweigert" ignorieren On Local Error Resume Next ' Unterordner lesen If Folder.SubFolders.Count > 0 Then For Each SubFolder In Folder.SubFolders ' Hier wird die Funktion REKURSIV aufgerufen, ' um alle weiteren Unterordner des SubFolders ' zu ermitteln FSO_GetAllFolders Liste, sPath & SubFolder.Name Next End If End Sub Und wenn Sie sich den obigen Code anschauen, werden Sie feststellen, dass es sich hierbei um wirklich nur ein paar wenig benötigte Codezeilen handelt - dank dem FSO und natürlich der verwendeten Rekursion. Und das ganze ist sogar schon sortiert, auch wenn die ListBox-Eigenschaft Sorted = False festgelegt ist. Halt ganz wie im Windows-Explorer Dieser Tipp wurde bereits 49.012 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
Neu! sevPopUp 2.0 Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |