Verzeichnis rekursiv durchlaufen + Callback

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Didelphodon
Beiträge: 360
Registriert: 18.12.2004 13:03
Wohnort: Wien
Kontaktdaten:

Verzeichnis rekursiv durchlaufen + Callback

Beitrag 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.
Das Leben ist ein sch*** Spiel, aber die Grafik ist irre!
Fighting for peace is like fuc*ing for virginity!
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
Didelphodon
Beiträge: 360
Registriert: 18.12.2004 13:03
Wohnort: Wien
Kontaktdaten:

Beitrag 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:
Das Leben ist ein sch*** Spiel, aber die Grafik ist irre!
Fighting for peace is like fuc*ing for virginity!
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag 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.
Benutzeravatar
Didelphodon
Beiträge: 360
Registriert: 18.12.2004 13:03
Wohnort: Wien
Kontaktdaten:

Beitrag 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.
Das Leben ist ein sch*** Spiel, aber die Grafik ist irre!
Fighting for peace is like fuc*ing for virginity!
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Als Lib sollte es funktionieren nicht aber als eigenständige DLL.
Benutzeravatar
Didelphodon
Beiträge: 360
Registriert: 18.12.2004 13:03
Wohnort: Wien
Kontaktdaten:

Beitrag von Didelphodon »

Ist ja (vom Copy/Paste-Fehler "DLL" abgesehen) auch nur als "normaler" Code gepostet. /:->
Das Leben ist ein sch*** Spiel, aber die Grafik ist irre!
Fighting for peace is like fuc*ing for virginity!
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Deinen Code könnte man noch deutlich schneller machen... Ganz einfach durch Nutzung des Schlüsselwortes 'Continue' an den richtigen Stellen... :wink:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Da hat aber jemand das Handbuch für Assembler gelesen. Da hat AND51
ausnahmsweise mal recht ;).
Bild
Benutzeravatar
Didelphodon
Beiträge: 360
Registriert: 18.12.2004 13:03
Wohnort: Wien
Kontaktdaten:

Beitrag 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:
Das Leben ist ein sch*** Spiel, aber die Grafik ist irre!
Fighting for peace is like fuc*ing for virginity!
Antworten