[PB 4.0] Eine weitere Routine zur rekursiven Dateisuche
Verfasst: 06.03.2006 13:51
Tach,
hier ein weiterer kleiner Code, mit dem man einen Datenträger rekursiv
nach Dateien durchsuchen kann. Die Besonderheit hier ist, dass man in
der aufzurufenden Routine 2 Prozeduren angeben kann, die dann
angesprungen werden, wenn entweder eine Datei oder ein Ordner
gefunden wird. Des weiteren lässt sich die Rekursion nach Belieben
abbrechen.
Hier ein Beispielaufruf der Include-Datei:
Und hier der Include-Code (speichern unter [c]FindFiles.pbi[/c]):
Grüße ... Kiffi
hier ein weiterer kleiner Code, mit dem man einen Datenträger rekursiv
nach Dateien durchsuchen kann. Die Besonderheit hier ist, dass man in
der aufzurufenden Routine 2 Prozeduren angeben kann, die dann
angesprungen werden, wenn entweder eine Datei oder ein Ordner
gefunden wird. Des weiteren lässt sich die Rekursion nach Belieben
abbrechen.
Hier ein Beispielaufruf der Include-Datei:
Code: Alles auswählen
XIncludeFile "FindFiles.pbi"
Procedure FoundFile(Directory$, Filename$)
Static lCounter
Select LCase(GetExtensionPart(Filename$))
Case "ico", "png"
Debug "Found file: " + Directory$ + Filename$
lCounter + 1
If lCounter > 99
FindFiles_Stop() ; Rekursive Dateisuche stoppen
EndIf
EndSelect
EndProcedure
Procedure FoundDirectory(Directory$)
Debug "Found Directory: " + Directory$
EndProcedure
; Hier wird die eigentliche Suchroutine aufgerufen
; wir übergeben neben dem Pfad, der durchsucht werden soll,
; die Adresse der Prozedur FoundFile(), die dann aufgerufen wird
; wenn eine Datei gefunden wird und die Adresse der Prozedur
; FoundDirectory(), die aufgerufen wird, wenn ein Ordner gefunden
; wird.
FindFiles_Start("D:\icons\", @FoundFile(), @FoundDirectory())
Code: Alles auswählen
EnableExplicit
Global NotifyFunctionFindFile
Global NotifyFunctionFindDirectory
Global StopFindFiles
Procedure BrowseDirectory(DirectoryToBrowse.s)
Define.l DirectoryNumber
Define.s FoundFileName
Define.s FoundDirectory
Define.s FoundDirectoryName
If Right(DirectoryToBrowse, 1) <> "\" : DirectoryToBrowse + "\" : EndIf
DirectoryNumber = ExamineDirectory(#PB_Any, DirectoryToBrowse, "")
If DirectoryNumber
While NextDirectoryEntry(DirectoryNumber)
Select DirectoryEntryType(DirectoryNumber)
Case #PB_DirectoryEntry_File
FoundFileName = DirectoryEntryName(DirectoryNumber)
If NotifyFunctionFindFile
CallFunctionFast(NotifyFunctionFindFile, DirectoryToBrowse, FoundFileName)
EndIf
Case #PB_DirectoryEntry_Directory
FoundDirectoryName = DirectoryEntryName(DirectoryNumber)
If FoundDirectoryName <> "." And FoundDirectoryName <> ".."
If NotifyFunctionFindDirectory
FoundDirectory = DirectoryToBrowse + FoundDirectoryName
CallFunctionFast(NotifyFunctionFindDirectory, FoundDirectory)
EndIf
If StopFindFiles : Break : EndIf
BrowseDirectory(DirectoryToBrowse + FoundDirectoryName)
EndIf
EndSelect
If StopFindFiles : Break : EndIf
Wend
FinishDirectory(DirectoryNumber)
EndIf
EndProcedure
Procedure FindFiles_Start(DirectoryToBrowse.s, FunctionToCallIfFindFile.l, FunctionToCallIfFindDirectory.l)
NotifyFunctionFindFile = FunctionToCallIfFindFile
NotifyFunctionFindDirectory = FunctionToCallIfFindDirectory
StopFindFiles = #False
BrowseDirectory(DirectoryToBrowse)
EndProcedure
Procedure FindFiles_Stop()
StopFindFiles = #True
EndProcedure