Seite 1 von 2

Verzeichnis rekursiv durchlaufen + Callback

Verfasst: 11.12.2006 11:53
von Didelphodon
Hallo!

Mit dem folgenden Code könnt Ihr einen anzugebenden Pfad rekursiv durchlaufen. Eine zu "registrierende" Callback-Prozedur wird dann entsprechend aufgerufen.

Code: Alles auswählen

ProcedureDLL PBE_ScanPath(path.s, callbackProcedure.l) ; Scan the given path recursively and call callback (format dirId.l, path.s).
    Protected dirId.l 
    
    dirId = ExamineDirectory(#PB_Any, path, "*.*")
    If (dirId)
        While NextDirectoryEntry(dirId)
            If DirectoryEntryType(dirId) = #PB_DirectoryEntry_File
                CallFunctionFast(callbackProcedure, dirId, path)
            Else
                name.s = DirectoryEntryName(dirId)
                If (name <> "." And name <> "..")
                    CallFunctionFast(callbackProcedure, dirId, path)
                    PBE_ScanPath(path + DirectoryEntryName(dirId) + "\", callbackProcedure)
                EndIf
            EndIf
        Wend
        FinishDirectory(dirId)
    EndIf
EndProcedure
Viel Spaß,
Didel.

Verfasst: 11.12.2006 11:59
von Tafkadasom2k5
Sorry, wenn ich so doof frage, aber wozu bräuchte ich denn zum Beispiel die Callback?

Zum ANzeigen des aktuellen Dateinamens in PB? Ich meine, wenn ich nicht unbedingt Threads nutze, dann bekomme ich mit den PB-Internen Befehlen doch auch kein "Fenster" zustande, welches mir den Progress anzeigt..?

ODer steh ich gerade voll aufm Schlauch?

Mit WinAPI und Callbacks wäre das natürlich was Anderes..!

Gr33tz
Tafkadasom2k5

Verfasst: 11.12.2006 12:04
von Didelphodon
Die Möglichkeit eines Callbacks separiert die Behandlung der eigentlichen Information (also hier des effektiven Eintrages) vom Algorithmus des rekursiven Durchlaufens. => Clean Code also, und damit modular einsetzbar. :wink:

Verfasst: 11.12.2006 18:32
von HeX0R
ProcedureDLL() ... hmm... ich denke, wenn du das tatsächlich in eine DLL packen willst, kann der Callback (so er im aufrufenden Hauptprogramm sitzt) mit dirId nichts anfangen.

Verfasst: 11.12.2006 18:35
von Didelphodon
@hexor: Hab das Ding aus meiner PBE-Library rausgenommen und vergessen das DLL wegzunehmen :oops: , aber bei mir funktionierts als PB-Lib ausgezeichnet.

Verfasst: 11.12.2006 18:37
von HeX0R
Als Lib sollte es funktionieren nicht aber als eigenständige DLL.

Verfasst: 11.12.2006 18:53
von Didelphodon
Ist ja (vom Copy/Paste-Fehler "DLL" abgesehen) auch nur als "normaler" Code gepostet. /:->

Verfasst: 11.12.2006 23:22
von AND51
Deinen Code könnte man noch deutlich schneller machen... Ganz einfach durch Nutzung des Schlüsselwortes 'Continue' an den richtigen Stellen... :wink:

Verfasst: 12.12.2006 00:40
von MVXA
Da hat aber jemand das Handbuch für Assembler gelesen. Da hat AND51
ausnahmsweise mal recht ;).

Verfasst: 12.12.2006 00:53
von Didelphodon
AND51 hat geschrieben:Deinen Code könnte man noch deutlich schneller machen... Ganz einfach durch Nutzung des Schlüsselwortes 'Continue' an den richtigen Stellen... :wink:
Und wo? - Es wird doch keine Zeile unnötig ausgeführt??! :freak: