Seite 1 von 2
Verzeichnis mit allen Unterverzeichnissen scannen? (Geklärt)
Verfasst: 17.05.2007 16:33
von Vermilion
Ich habe die Suche benutzt, aber nichts gefunden.
Verzeichnis mit allen Unterverzeichnissen scannen?
Ich möchte jede MP3 Datei (bzw. vielleicht auch WMA

) in eine Liste aufnehmen (LinkedList). Damit ich dann eine Abspielliste habe.
Beispiel: Winamp bei der Medienbibliothek.
PS: Ich weiß, es wird nervig, ich will auch mal einen Player machen. Aber eher nur für mich, soll cool aussehen und das nötigste mitbringen. In die Programm-Feedback Sektion wird er höchstwahrscheinlich nicht kommen.

Verfasst: 17.05.2007 16:38
von AND51
Ich schlage vor, dass du dir bitte den nötigen Code selbst raussuchst. Es gibt genügend Codes, die rekursiv suchen und diese sind können innerhalb von 60 Sekunden an deine Anforderungen angepasst werden.
Also bitte...
Verfasst: 17.05.2007 16:45
von Xaby
mmmm
das wurde doch erst gestern gefragt.
Frag mal Kiffi, der hat da was geschrieben.
Gruß, Folker

Verfasst: 17.05.2007 16:47
von Vermilion
Achja, selber versucht habe ich es auch schon.
Ich habe aber nichts gefunden! Zumindest keinen verwendbaren Code. Entweder war es kein Code, oder nichts passendes. Ich brauche etwas wie das ExamineDiretory(), oder wie das hieß, mit dem Dateitypenfilter, bloß dass es auch die Unterverzeichnisse durchsucht! -.-
PS: Ich suchte mit folgenden Suchwörtern; Unterverzeichnis, Scannen durchsuchen, unterverzeichnisse, verzeichnis, ordner
Verfasst: 17.05.2007 16:48
von AND51
Such mal mit "rekursiv"...

Verfasst: 17.05.2007 16:54
von Vermilion

´Mh, entschuldigung, "Rekursiv" ist ein Fremdwort für mich, kannte ich nicht...
@Xaby: Hoppla, wiedermal nichts mitgekriegt...
Verfasst: 17.05.2007 17:08
von AND51
So, hier. Exklusiv für dich:
Code: Alles auswählen
EnableExplicit
Procedure sucheMusikdateien(pfad.s, Liste.s(), typ.s="mp3,wma,wav")
PathAddBackslash_(@pfad) ; Hängt Backslash an, falls nötig
Protected dir=ExamineDirectory(#PB_Any, pfad, ""), n
If dir
While NextDirectoryEntry(dir)
If DirectoryEntryType(dir) = #PB_DirectoryEntry_File
For n=1 To CountString(typ, ",")+1
If StringField(typ, n, ",") = LCase(GetExtensionPart(DirectoryEntryName(dir)))
AddElement(Liste())
Liste()=pfad+DirectoryEntryName(dir)
Break
EndIf
Next
Continue
ElseIf DirectoryEntryName(dir) <> "." And DirectoryEntryName(dir) <> ".."
sucheMusikdateien(pfad+DirectoryEntryName(dir), Liste(), typ)
EndIf
Wend
FinishDirectory(dir)
EndIf
EndProcedure
NewList MeineMucke.s()
sucheMusikdateien("C:\", MeineMucke())
Debug StrQ(CountList(MeineMucke()))+" Dateien gefunden:"
ForEach MeineMucke()
Debug MeineMucke()
Next
Übergib der Prozedur einfach eine LinkedList. Der Parameter 'typ' muss immer klein geschrieben werden und durch Komma getrennt!
Verfasst: 17.05.2007 17:16
von Vermilion

Ich danke dir tausend mal! Ich habe zwar endlich durch "rekursiv" etwas gefunden, aber nicht begriffen.
Und wenn ich selber da nachdenke, wie ich so etwas machen soll, gibz einen HirnError. Da kann ich einfach nicht weiterdenken, man kann sich das so vorstellen, man fährt eine Straße mit unbekannt vielen Abzweigungen lang. Und man will wissen was an jedem Ende ist. Und wenn man dann mal da ist, wie man dann zurückkommt, konnte ich mir nie vorstellen. Weil man muss er st zur letzten Abzweigung zurück, und wenn dieses Oberverz. durchsucht ist, noch einen zurück, etc..
Ich habe bei der Sache einfach Denkabstürze...

Verfasst: 17.05.2007 17:33
von Vermilion
Das habe ich daraus gemacht

:
Code: Alles auswählen
; PureBasic 4.00!
Procedure sucheMusikdateien(pfad.s, Liste.s(), typ.s="mp3,wma,wav")
PathAddBackslash_(@pfad) ; Hängt Backslash an, falls nötig
Protected dir=ExamineDirectory(#PB_Any, pfad, ""), n
If dir
While NextDirectoryEntry(dir)
If DirectoryEntryType(dir) = #PB_DirectoryEntry_File
For n=1 To CountString(typ, ",")+1
If StringField(typ, n, ",") = LCase(GetExtensionPart(DirectoryEntryName(dir)))
AddElement(Liste())
Liste()=pfad+DirectoryEntryName(dir)
Break
EndIf
Next
Continue
ElseIf DirectoryEntryName(dir) <> "." And DirectoryEntryName(dir) <> ".."
sucheMusikdateien(pfad+DirectoryEntryName(dir), Liste(), typ)
EndIf
Wend
FinishDirectory(dir)
EndIf
EndProcedure
NewList MeineMucke.s()
OpenWindow(0, 0, 0, 600, 400, "Musik", #PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
ButtonGadget(0, WindowWidth(0)-105, 5, 100, 20, "Auflisten")
StringGadget(1, 5, 5, 485, 20, "C:\")
ListViewGadget(2, 5,30, 590, 365)
Repeat
Event = WaitWindowEvent()
Gadget= EventGadget()
If Event = #PB_Event_Gadget
If Gadget = 0
sucheMusikdateien(GetGadgetText(1), MeineMucke())
ForEach MeineMucke()
AddGadgetItem(2, -1, MeineMucke())
Next
AddGadgetItem(2, -1, StrQ(CountList(MeineMucke()))+" Dateien gefunden")
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
End
Verfasst: 17.05.2007 17:41
von AND51
Vermilion hat geschrieben:Und wenn man dann mal da ist, wie man dann zurückkommt, konnte ich mir nie vorstellen. Weil man muss er st zur letzten Abzweigung zurück, und wenn dieses Oberverz. durchsucht ist, noch einen zurück, etc..
Richtig. Du musst jeden Ordner, wo du reingehst auch wiede ruasgehen. Also jede Straße, in die du einbiegst, legst du den Rückwärtsgang ein und fährst wieder raus.
Weiter als bis zur Hauptstraße (hier C:\) kannst du aber nie zurück.