Hier ein erneuter Versuch, ein Code zu veröffentlichen, der keiner Verbesserung bedarf

Code: Alles auswählen
Procedure.s suche(Pfad.s, DateiOderVerzeichnis.s, Gadget.l)
Protected verzeichnis.l, element.s, temp$
verzeichnis=ExamineDirectory(#PB_Any, Pfad, "")
If verzeichnis And DateiOderVerzeichnis <> "" And DateiOderVerzeichnis <> "." And DateiOderVerzeichnis <> ".." And DateiOderVerzeichnis <> "\"
Repeat
UseDirectory(verzeichnis)
Select NextDirectory()
Case 0 ; Wenn keine weiteren Einträge
ProcedureReturn ""
Case 1
If Right(DateiOderVerzeichnis, 1) <> "\" ; Wenn eine Datei gesucht wird
If IsGadget(Gadget)
SetGadgetText(Gadget, Pfad+DirectoryEntryName())
EndIf
If UCase(DirectoryEntryName()) = UCase(DateiOderVerzeichnis) ; Wenn Datei gefunden
ProcedureReturn Pfad+DirectoryEntryName()
Else ; Wenn Datei nicht gefunden
Delay(1)
Continue
EndIf
EndIf
Case 2
If Right(DateiOderVerzeichnis, 1) = "\" And UCase(DirectoryEntryName()) = UCase(Left(DateiOderVerzeichnis, Len(DateiOderVerzeichnis)-1))
If IsGadget(Gadget) ; ^--- Wenn ein Ordner gesucht wird und gefunden wurde
SetGadgetText(Gadget, Pfad+DirectoryEntryName()+"\")
EndIf
ProcedureReturn Pfad+DirectoryEntryName()+"\"
Else ; Wenn Ordner gesucht wird aber nicht gefunden wurde gehe in diesen Ordner (Rekursion) und suche weiter
If IsGadget(Gadget)
SetGadgetText(Gadget, Pfad+DirectoryEntryName()+"\")
EndIf
Delay(1)
temp$=suche(Pfad+DirectoryEntryName()+"\", DateiOderVerzeichnis, Gadget)
If temp$ ; Wenn in einem Unterordner etwas gefunden wurde, dann gehe wieder hoch zum Ausgangspunkt und gebe ihn aus
ProcedureReturn temp$
Else
If IsGadget(Gadget)
SetGadgetText(Gadget, "")
EndIf
EndIf
EndIf
EndSelect
ForEver
Else
If IsGadget(Gadget)
SetGadgetText(Gadget, "")
EndIf
ProcedureReturn ""
EndIf
EndProcedure
Soll nach einer Datei gesucht werden, den Dateinamen als 2. Parameter angeben.
Soll nach einem Ordner gesucht werden, den Ordnernamen als 2. Parameter angeben und sofern nötig ein Backslash anhängen ("\"), wie es in PB üblich ist. Bitte nicht sowas: "Mein Ordner\Unterordner\"!!
Bei Pfad, dem 1. Parameter, das Startverzeichnis angeben, das durchsucht werden soll, hier kann auch ein Laufwerk C:\ oder E:\ stehen.
Die Prozedur schützt sich vor Veräppelungen durch den benutzer und erkennt, ob das zu durchsuchende Verzeichnis nicht vorhanden ist, oder als Verzeichnis ein Leerstring oder "." und ".." und "\" übergeben wurden und gibt in dem Fall sofort kein rgebnis zurück. Einzig durch mehrere "\\" kann die Prozedur ausgetrickst werden und sucht sich dann nen Wolf

Ich hoffe, diese Prozedur gefällt euch.
