# Alle Datei mit der Endung .mp3 aus Ordnern und Unterordner in eine listbox schreiben



## vbeldor (12. September 2007)

Hallo,

Ich bin seit 3 Tagen dadran einen eigenen mp3-Play zu programieren.
der läuft auch, alles schön und gut, und auch den Pfad von einzelnen Liedern in die listbox einzufügen. Jetzt habe ich nur die Frage wie man einfachsten alle Lieder aus einem Ordner UND die Lieder aus den Unterordnern in die Listbox einträgt.

ich benutzte für das ordner auswählen:

```
Private Function OrdnerDialog() As String
    Dim oShell As Object
    Dim oOrdner As Object
    
    Set oShell = CreateObject("Shell.Application")
    Set oOrdner = oShell.BrowseForFolder( _
        Me.hwnd, "Bitte einen Ordner auswählen", 1)
        
    If Not oOrdner Is Nothing Then
        OrdnerDialog = oOrdner.Self.Path
    End If
    
    Set oOrdner = Nothing
    Set oShell = Nothing
End Function
```

und da ich immer kompliziert denke habe ich das problem nur so provisorisch gelöst:


```
Private Sub Command4_Click()
Dim i, a, b


Dir1.Path = OrdnerDialog
Label7.Caption = Dir1.Path



DoEvents
File1.Path = Dir1.Path
If File1.ListCount <> "0" Then
For b = -1 To Dir1.ListCount - 1 
Dir1.ListIndex = b
File1.Path = Dir1.List(Dir1.ListIndex)
Dir1.Path = File1.Path

If File1.ListCount <> "0" Then
For a = 0 To File1.ListCount - 1
File1.ListIndex = a
List1.AddItem (Dir1.List(Dir1.ListIndex) & "\" & File1.List(File1.ListIndex))
Next

ElseIf Dir1.ListCount <> "0" Then
For i = 0 To Dir1.ListCount - 1
Dir1.ListIndex = i
File1.Path = Dir1.List(Dir1.ListIndex)

For a = 0 To File1.ListCount - 1
File1.ListIndex = a
List1.AddItem (Dir1.List(Dir1.ListIndex) & "\" & File1.List(File1.ListIndex))
Next


Next

End If
Dir1.Path = Label7.Caption
Next


End If

End Sub
```

ich blick da leider selber nicht mehr sorichtig durch aber bis jetzt ist dieser Code von mir sehr umständlich und wenn dort Unterordner in Unterordner kommt fügt der die datürlich nichtmehr zur Liste hinzu...

Kann mir jemand helfen?


Eldor


----------



## vbeldor (16. September 2007)

Ich habe jetzt hier im Forum etwas gefunden aber das ist für excel und ich hab es nicht geschafft das umzuschreiben weil der Code ziemlich lang ist vllt kann mir ja jemand helfen...

Hier der Link
und Hier die Datei


----------



## Jacka (16. September 2007)

Hi!

Warum machst du das mit shell?

Und warum mit der "dir" Funktion so kompliziert!

Beispiel zum Auslesen eines Ordners:

```
' Mit folgender Funktion werden alle mp3-Dateien eines Ordners aufgelistet
Dim cFile As String
 
cFile = Dir("C:\*.mp3") ' Alle mp3-Dateien im Verzeichnis C: ausgeben
Do While cFile <> "" ' Wiederholen bis cFile=""
 list1.AddItem cFile
Loop
```

Mit der Funktion "GetAttr" kannst du schauen, ob es sich um ein Verzeichnis
handelt. Wenn ja kannst du es wieder mit dir auslesen.

Schau mal bei vbarchiv vorbei:
http://www.vbarchiv.net/commands/Dir.php

Viele Grüße,
Jacka


----------



## vbeldor (16. September 2007)

Entschuldigung aber irgenwie werden ich daraus nicht schlau...

ich habe das Beispiel ausprobiert aber das hat nicht richtig funktioniert.. 


```
Private Sub Form_Load()
' Mit folgender Funktion werden alle mp3-dateien eines Ordners aufgelistet
Dim cFile As String
 
cFile = Dir("C:\Musik\*.mp3") ' Alle Textdateien im Verzeichnis C: ausgeben
Do While cFile <> "" ' Wiederholen bis cFile=""
 
  list1.additem (cFile) ' Aufruf der Funktion ohne Parameter!!
Loop
end sub
```

wenn ich das jetzt starte hängt sich das Programm auf. Wahrscheinlich weil der in einer Endlos-Schleife hängt.

wenn ich jetzt vor die do-Loop Schleife eine msgbox setzte, zeigt die mir eine Datei an und danach hängt sich das Programm dann auf. 

kann mir das vielleicht genauer erklären was da passiert und wie man das beheben kann?


----------



## ronaldh (17. September 2007)

Du kraddelst da ja immer auf der ersten Datei rum. Du musst dem Programm schon sagen, dass Du nun den nächsten Namen ausgeben:


```
Private Sub Form_Load()
' Mit folgender Funktion werden alle mp3-dateien eines Ordners aufgelistet
Dim cFile As String
 
cFile = Dir("C:\Musik\*.mp3") ' Alle Textdateien im Verzeichnis C: ausgeben
Do While cFile <> "" ' Wiederholen bis cFile=""
 
  List1.AddItem (cFile) ' Aufruf der Funktion ohne Parameter!!
  cFile = Dir
Loop
End Sub
```

Da hilft übrigens auc, einfach mal in die VB-Hilfe zu gucken, da steht das auch drin.

Viele Grüsse
Ronald


----------

