Verzeichnis mit allen Unterverzeichnissen scannen? (Geklärt)

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Verzeichnis mit allen Unterverzeichnissen scannen? (Geklärt)

Beitrag 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 :roll: ) 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. :wink:
Zuletzt geändert von Vermilion am 17.05.2007 17:34, insgesamt 1-mal geändert.
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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. :twisted:

Also bitte...
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

mmmm

das wurde doch erst gestern gefragt.

Frag mal Kiffi, der hat da was geschrieben.

Gruß, Folker :allright:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag 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
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Such mal mit "rekursiv"... :roll:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

:oops: ´Mh, entschuldigung, "Rekursiv" ist ein Fremdwort für mich, kannte ich nicht...

@Xaby: Hoppla, wiedermal nichts mitgekriegt...
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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!
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

:praise: 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... :oops:
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Das habe ich daraus gemacht :mrgreen: :

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
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten