[VB6 - W2K] Verzeichnisse, Unterverzeichnisse und Dateien auslesen

-cta-

Mitglied
moin!

Kann mir jemand einen Tipp geben, wie ich alle Unterverzeichnisse und Dateien eines Verzeichnisses nacheinander auslesen kann?

Ich habe es schon mir folgendem Beispiel versucht, dieses funktioniert aber nicht.... ich bekomme eine datei als verzeichnis angezeigt und vb versucht in der datei weiter zu suchen....

http://www.shadoware.de/vb/foreachsubpath.html

Help!
 
hi,

du kannst über die dir funktion rekursiv durch die verzeichnisse wandern, oder du machst es mit einer DirListBox und FileListBox. wenn du mit den beiden rekursiv durchgehst, kriegst du alle verzeichnisse + dateien
 
Ich finde an der Stelle APIs "FindFirstFile" und "FindNextFile" immer noch am einfachsten.

Mit dem CallBack kann man die Suchergebnisse aus der WIN32_FIND_DATA bequem im Programm verwenden, erfahren ob es ein Verzeichnis oder eine Datei ist, auf Endungen prüfen und so weiter und so fort.
 
Hey,
Passend zu diesem Thread suche ich auch nach einem Code im VB 6, der mir das Hauptverzeichnis inklusive deren Unterverzeichnisse nach INP-Datein (INP-Datein sind den txt-Datein ähnlich) durchsucht. Anschließend soll der Dateinamen und einen bestimmten Textbschnitt der INP-Datei im Excelsheet aufgelistet werden. Ich hab in den letzten Tagen schon einige Codevarianten versucht, die in Unterordnern suchen, jedoch hat keines funktioniert. Bis jetzt hab ich mittels Forumrecherche den folgenden Code geschrieben:

Visual Basic:
    Sub Import_Inputfile()

    'Hauptordner festlegen
    Dim AppShell As Object
    Dim BrowseDir As Object
    Dim Pfad As String

    Set AppShell = CreateObject("Shell.Application")
    'Browserfenster öffnen
    Set BrowseDir = AppShell.BrowseForFolder(0, "Ordner auswählen", &H1000, "C:\Pfad") 
    On Error Resume Next
    Pfad = BrowseDir.Items().Item().path
    If Pfad = "" Then Exit Sub
    On Error GoTo 0
       
    Dim ExcZeile As Long
    Dim InpName As String
    Dim ZString As String
    Dim FreeF As Integer
    Dim InpZeile As Integer

    InpName = Dir(Pfad & "\*.inp") 'Suchen nach INP-Filse
        If InpName = "" Then MsgBox " In diesem Verzeichnis sind keine INP-Datein": Exit Sub         
        ExcZeile = 5 'Einfügen in Zeile 5

        Do Until InpName = "" 'Suche bis Ordner durchlaufen ist
            FreeF = FreeFile
            Open Pfad & "\" & InpName For Input As #FreeF
            Do Until EOF(FreeF) 'Suche bis "*Heading gefunden und nächste Zeile eingelesen
                Line Input #FreeF, ZString
                If ZString = "*Heading" Then
                    Line Input #FreeF, ZString
                    Exit Do
                ElseIf ZString = "*HEADING" Then
                    Line Input #FreeF, ZString
                    Exit Do
                End If
            Loop
            Close #FreeF
            Range("A" & ExcZeile).Value = Replace(InpName, "", "") 'Inp-Dateinamen in Excel schreiben
            Range("B" & ExcZeile).Value = Replace(ZString, "", "")  'Textabschnitt in Excel einschreiben
            InpName = Dir
            ExcZeile = ExcZeile + 1 'Zeilensprung im Excel
            InpZeile = 0
        Loop   
End Sub

Dieser Code funktioniert für einen Ordner, sucht jedoch nicht die Unterordner durch.
Könntet ihr mir bitte einen Code schreiben der dieses kann. Könntet ihr mir auch bitte den Code kommentieren, da ich noch blutiger VB-Anfänger bin.
Bei Fragen einfach posten, ich werde versuchen sie so gut wie möglich zu beantworten!

Mir ist auch klar, das dieses Thema schon mehrmals behandelt wurde. Antworten wie "Doublepost" bringen mich nicht ans Ziel.
Vielen Dank für eure konstruktive Hilfe!
 
Zuletzt bearbeitet:
Das zauberwort heisst rekursion (wie auch schon erwähnt). Es bringt dir nicht viel, wenn dir jemand den code schreibt, du aber nicht verstehst, wie er funktioniert.
Nächster punkt: zeile 23 ist überflüssig, und würde im fall einer rekursion dich rauswerfen
Witer: zwischen zeile 45 und 46 muss ein dir-aufruf kommen, um das nächste unterverzeichnis zu bekommen. Falls gefunden, rekursions-sprung mit übergabe des gefunden verzeichnisses, falls nicht wird die funktion/sub verlassen, und ggf. Eine rekursionsstufe zurückgesprungen

Wichtig bei solchen rekursionen: immer zuerst nach verzeichnissen suchen. Stell dir den explorer in normaler sortierung vor: da steht zu oberst immer zuerst verzeichnisse, und erst dann kommen die dateien.
 
hey Zvoni, danke für die Tipps, ich werd mich mal versuchen!

edit: es funktioniert jetzt, wie du beschrieben hast, mit der Rekursion. thx
 
Zuletzt bearbeitet:
Zurück