Naja, wenn das Programm sonst nichts machen muß, kannste die Suche ja mit einem Button starten und halt
einfach warten, bis es mit dem Directory fertig ist.
Die Progressbar kann man ja so anpassen, daß der Maximalwert immer die Anzahl der Dateien eines Ordners ist.
(siehe SetGadgetAttribute() ). Den Timer habe ich durch For i = 1 To 500 ersetzt, damit man auch was sieht.
Den kannst du auch später wieder rausnehmen und mit dem Code ersetzen, was du mit den Dateien machen willst.
Vielleicht so etwa :
Code: Alles auswählen
Procedure.i CountFiles (sPath.s)
Protected numFiles = 0
Protected handle
If Right(sPath, 1) <> "\"
sPath + "\"
EndIf
handle = ExamineDirectory(#PB_Any, sPath, "*.*")
If handle = 0
ProcedureReturn 0
EndIf
While NextDirectoryEntry(handle)
If DirectoryEntryType(handle) = #PB_DirectoryEntry_File
numFiles + 1
Else
If DirectoryEntryName(handle) <> "." And DirectoryEntryName(handle) <> ".."
numFiles + CountFiles(sPath + DirectoryEntryName(handle))
EndIf
EndIf
Wend
FinishDirectory(handle)
ProcedureReturn numFiles
EndProcedure
path$ = "C:\Temp\"
cfiles.l = CountFiles(path$)
If OpenWindow(0, 0, 0, 400, 100, "Timer Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ProgressBarGadget(0, 10, 10, 380, 20, 0, cfiles)
Value = 0
Repeat
Event = WaitWindowEvent()
If ExamineDirectory(0, path$, "*.*")
While NextDirectoryEntry(0)
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
Type$ = "[File] "
Value + 1
SetGadgetState(0, Value)
For i = 1 To 500
Next
EndIf
Wend
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
Ist jetzt nur für den einen Ordner.
Vielleicht kann man das auch noch mit einer Sanduhr als Cursor verfeinern.
Evtl kannst du damit ja was anfangen.