Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DisableDebugger
- EnableExplicit
- Procedure __FO_FileSearchAll(Dir.s, List Files.s())
- Protected ID, EntryName.s
- ID = ExamineDirectory(#PB_Any, Dir, "*.*")
- If ID
- While NextDirectoryEntry(ID)
- EntryName=DirectoryEntryName(ID)
- If EntryName = "." Or EntryName = ".."
- Continue
- EndIf
- If DirectoryEntryType(ID) = #PB_DirectoryEntry_Directory ; если путь является папкой, то
- __FO_FileSearchAll(Dir+EntryName+"\", Files()) ; рекурсивный вызов во вложенную папку
- EndIf
- If AddElement(Files())
- Files() = Dir+DirectoryEntryName(ID)
- EndIf
- Wend
- FinishDirectory(ID)
- EndIf
- EndProcedure
- Procedure _FO_FileSearch(*Result.string, Path$, Mask$ = "*", TypeMask = 0)
- Protected RID, Len, *Point
- ; Protected FileList.string\s
- NewList Files.s() ; список для хранения путей
- __FO_FileSearchAll(Path$, Files()) ; функция поиска файлов
- If TypeMask = 0
- RID = CreateRegularExpression(#PB_Any, Mask$)
- If RID
- ForEach Files()
- If Not MatchRegularExpression(RID, Files())
- DeleteElement(Files())
- EndIf
- Next
- FreeRegularExpression(RID)
- Else
- Debug RegularExpressionError()
- EndIf
- EndIf
- 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()) ; очищаем список
- ; ProcedureReturn Res
- EndProcedure
- Define StartTime=ElapsedMilliseconds() ; метка времени
- ; Path$ = "C:\Музыка" ; Создаёт список всех файлов и папок в домашнем каталоге.
- Define Path$ = "/home/user"
- ; Result = ""
- Define Result.string\s = "" ; Объявили встроенную структуру string с именем Result и элементом структуры \s
- ; _FO_FileSearch(@Result, Path$, "\A.*?\.mp3\z")
- _FO_FileSearch(@Result, Path$, "\A.*?\.js\z")
- Define Res.s = "Прошло времени между метками " + Str(ElapsedMilliseconds()-StartTime) + " мсек"
- EnableDebugger
- ; Debug Res ; вывод данных о времени выполнения
- Debug Result\s
Add Comment
Please, Sign In to add comment