Hallo ihr Forennutzer. Da wollte ich eben locker flockig das schreiben, was ich schon in vielen anderen Programmiersprachen mühelos daher geschrieben habe und ich muss mich schämern: Hier klappts nicht so, wie ichs will: Vor hatte ich, die Ordner + UnterOrdner + Deren UnterOrdner usw. sowie alle Dateien dieser Ordner zu zählen. so sieht mein Source aus. Leider Gottes zählt er mir... nix. Schwachsinnige ausgaben.
1. >> die global variablen müssen VOR die procedure
2. du mußt die pfadsymbole "." und ".." aussortieren.
3. du mußt beim rekursiven aufruf den pfadnamen zusätzlich zum namen des subdirs wieder mit einbeziehen.
4. wenn du von der rekursion zurückkommst, mußt du mit UseDirectory(..) den examine-status wiederherstellen.
[5. PB-version?]
@edel
dacht ich auch, aber wenn du die UseDirectory()-zeile auskommentierst, wird's nichts.
vielleicht ist das aber in pb4 anderers ..aber da ist das glaub ich sowieso ein bißchen einfacher zu lösen. in pb3.94 gibt's ja kein FinishDirectory().
die variable Ord ist ja auch wieder die vorherige, aber durch ein erneutes examineDirectory() wurde sozusagen das 'CurrentExaminedDir' geändert, und das ist ja unabhängig vom proc-stack.
Procedure reDir(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 = ".."
reDir(Path+"\"+name)
Debug Path+"\"+name
ElseIf DirectoryEntryType(dir) = #PB_DirectoryEntry_File
Debug name
EndIf
Wend
FinishDirectory(dir)
EndIf
EndProcedure
reDir("c:\")
#NULL hat geschrieben:
[bla]
4. wenn du von der rekursion zurückkommst, mußt du mit UseDirectory(..) den examine-status wiederherstellen.
Wieso das ? Wenn ich zurueck zu der Procedure komme sind die Variablen doch noch gueltig ... aeh , oder ?
Nein. In PB 3.94 gibt's doch kein FinishDirectory(). Das heißt, wenn man zurückkommt, dann wird der lette Ordner immernoch der aktive Ordner sein. Das Programm schmiert dann ab, weil man versucht, weitere Dateien und Ordner auszulesen, obwohl man schon alles erfragt hat.