Seite 1 von 1
Alle Ordner zählen [X]
Verfasst: 10.12.2007 21:38
von RSBasic
Hallo,
ich möchte gerne ermitteln, wieviele Ordner auf der Festplatte vorhanden sind.
Dabei gehe ich in Unterverzeichnisse und zähle sie einzeln.
Code: Alles auswählen
Global Ordneranzahl=0
Procedure Ordnerzaehlen(Path.s)
dir = ExamineDirectory(#PB_Any,Path,"*.*")
If dir
While NextDirectoryEntry(dir)
name.s = DirectoryEntryName(dir)
If DirectoryEntryType(dir) = #PB_DirectoryEntry_Directory And Not name = "." And Not name = ".."
Ordnerzaehlen(Path+"\"+name)
Ordneranzahl+1
Debug Ordneranzahl
EndIf
Wend
FinishDirectory(dir)
EndIf
EndProcedure
Ordnerzaehlen("c:\")
Gibt es keine andere, schnellere, bessere Lösung?
Verfasst: 10.12.2007 21:44
von milan1612
Kurze Antwort: Nein

Verfasst: 11.12.2007 11:34
von Franky
Naja, man kann es zumindest optimieren
Code: Alles auswählen
Global Ordneranzahl=0
Procedure Ordnerzaehlen(Path.s)
dir = ExamineDirectory(#PB_Any,Path,"*.*")
If dir
NextDirectoryEntry(dir)
NextDirectoryEntry(dir)
While NextDirectoryEntry(dir)
name.s = DirectoryEntryName(dir)
If DirectoryEntryType(dir) = #PB_DirectoryEntry_Directory
Ordnerzaehlen(Path+"\"+name)
Ordneranzahl+1
Debug Ordneranzahl
EndIf
Wend
FinishDirectory(dir)
EndIf
EndProcedure
Ordnerzaehlen("c:\")
"." und ".." sitzen soweit ich das weiß ja immer am Anfang

Verfasst: 11.12.2007 17:00
von AND51
Naja, man kann es zumindest
noch weiter optimieren:
Code: Alles auswählen
Procedure Ordnerzaehlen(Path.s)
Protected Ordner
dir = ExamineDirectory(#PB_Any,Path,"")
If dir
NextDirectoryEntry(dir)
NextDirectoryEntry(dir)
While NextDirectoryEntry(dir)
If DirectoryEntryType(dir) = #PB_DirectoryEntry_Directory
Ordner+Ordnerzaehlen(Path+"\"+DirectoryEntryName(dir))+1
Continue
EndIf
Wend
FinishDirectory(dir)
EndIf
ProcedureReturn Ordner
EndProcedure
Debug Ordnerzaehlen("c:\")

Wieso den Namen
jedes Elements zwischenspeichern, wo doch nur Namen von Ordnern gebraucht werden?
Wozu überhaupt zwischenspeichern, wenn man doch direkt einsetzen kann?
Code ist ungetestet, ich glaube man muss bei jedem rekursiven Aufruf manuell +1 rechnen, oder?
Verfasst: 11.12.2007 17:02
von #NULL
das continue ist glaube ich unfug, da würde in jeder ordnertiefe nur ein ordner untersucht (einschließlich seines ersten unterordners usw..)
Verfasst: 11.12.2007 18:13
von AND51
Im gegenteil, allein in C: sind schon mehrere ordner drin (zumindest bei mir). Sagen wir mal, es sind 20 stück, dann spring er 20 Mal nach dem zurückkommen direkt nach oben, ohne erst die Schleife zuende zu laufen.
Verfasst: 11.12.2007 18:16
von Deeem2031
Da aber nach dem Continue eh nichts steht ist es völlig sinnlos...
Verfasst: 11.12.2007 18:18
von AND51
Das stimmt, aber ich hatte schon mal so einen Fall, auch beim rekursiven Ordner-Stöbern; IIRC dann hats was gebracht, bin mir aber nicht mhehr sicher... Und wenn schon: Mit einem ungewöhnlichen
Continue sieht der Code doch gleich viel gekonnter/eleganter aus...

Verfasst: 11.12.2007 19:35
von #NULL
ich hab Continue mit Break verwechselt, tschuldsche.
aber sinnlos ist es trotzdem.