Описание функции
FileSearch
Поиск файлов в папке включая подкаталоги.
FileSearch(*Result.string, sPath.s, Mask$ = "*", depth = 130)
Параметры
*Result.string | Указатель на структуру строки, в которую будет помещён результат |
sPath.s |
Путь к папке |
Mask$ |
Маска/фильтр файлов (Wildcard) |
depth |
Глубина поиска. Если указать 0, то файлы только в текущей папке |
Возвращаемое значение
Возвращает список файлов в виде многострочного текста, но можно переделать вывод данных, чтобы возвращать List().Пример
; AZJIO
; https://www.purebasic.fr/english/viewtopic.php?p=566355#p566355
EnableExplicit
Procedure FileSearch(*Result.string, sPath.s, Mask$ = "*", depth = 130)
Protected Len, *Point
Protected NewList Files.s()
Protected sName.s, c = 0
Protected Dim aExaDir(depth)
Protected Dim aSePath.s(depth)
If Right(sPath, 1) <> #PS$
sPath + #PS$
EndIf
aSePath(c) = sPath
aExaDir(c) = ExamineDirectory(#PB_Any, sPath, Mask$)
If Not aExaDir(c)
ProcedureReturn
EndIf
Repeat
While NextDirectoryEntry(aExaDir(c))
sName = DirectoryEntryName(aExaDir(c))
If sName = "." Or sName = ".."
Continue
EndIf
If DirectoryEntryType(aExaDir(c)) = #PB_DirectoryEntry_Directory
If c >= depth
Continue
EndIf
sPath = aSePath(c)
c + 1
aSePath(c) = sPath + sName + #PS$
aExaDir(c) = ExamineDirectory(#PB_Any, aSePath(c), Mask$)
If Not aExaDir(c)
c - 1
EndIf
Else
If AddElement(Files())
Files() = aSePath(c) + sName
EndIf
EndIf
Wend
FinishDirectory(aExaDir(c))
c - 1
Until c < 0
Debug "Depth = " + Str(depth)
Debug "Count = " + Str(ListSize(Files()))
Len = 0
ForEach Files()
Len + Len(Files()) + 2
Next
*Result\s = Space(Len)
*Point = @*Result\s
ForEach Files()
CopyMemoryString(Files() + #CRLF$, @*Point)
Next
ClearList(Files())
EndProcedure
Define StartTime = ElapsedMilliseconds()
Define Path$ = "/home/user"
Define Path$ = GetTemporaryDirectory()
Define Result.string
FileSearch(@Result, Path$, "*.exe", 2) ; Wildcard, *.exe
Define Time.s = "Time = " + Str(ElapsedMilliseconds() - StartTime) + " ms"
Debug Time
Debug "_______________"
Debug Result\s