linux windows osx
Added:
SortFileListByDate()
SortFileListBySize()
changed to use #PS$ and example uses current date as cut off
Code: Select all
EnableExplicit
Structure FileDate
Created.i
Modified.i
Accessed.i
EndStructure
Structure File
Name.s
Attributes.i
Date.FileDate
Size.q
EndStructure
Procedure GetFileList(StartDirectory.s,List Lfiles.file(),Pattern.s="*.*",Recursive=1)
Protected PatternCount,Depth,a,CurrentDirectoryID,Directory.s,TempDirectory.s
Protected FileAttributes.i,FileSize.i,FileDate.FileDate,FileName.s,FullFileName.s
Static NewList Lpattern.s()
Static PatternSet,FileCount
If Not PatternSet
Pattern = RemoveString(Pattern,"*.")
PatternCount = CountString(Pattern,"|") + 1
ClearList(lpattern())
For a = 1 To PatternCount
AddElement(Lpattern())
Lpattern() = UCase(StringField(Pattern,a,"|"))
Next
PatternSet=1
ElseIf depth = 0
PatternSet = 0
EndIf
CurrentDirectoryID = ExamineDirectory(#PB_Any, StartDirectory, "*.*")
If CurrentDirectoryID
While NextDirectoryEntry(CurrentDirectoryID)
If DirectoryEntryType(CurrentDirectoryID) = #PB_DirectoryEntry_File
Directory = StartDirectory
FileName = DirectoryEntryName(CurrentDirectoryID)
FileDate\Created = DirectoryEntryDate(CurrentDirectoryID,#PB_Date_Created)
FileDate\Modified = DirectoryEntryDate(CurrentDirectoryID,#PB_Date_Modified)
FileDate\Accessed = DirectoryEntryDate(CurrentDirectoryID,#PB_Date_Accessed)
FileAttributes = DirectoryEntryAttributes(CurrentDirectoryID)
FileSize = DirectoryEntrySize(CurrentDirectoryID)
ForEach Lpattern()
If lpattern() = "*" Or GetExtensionPart(UCase(FileName)) = lpattern()
FullFileName.s = StartDirectory + FileName
AddElement(LFiles())
Lfiles()\Name = FullFileName
Lfiles()\Date = FileDate
Lfiles()\Size = FileSize
Lfiles()\Attributes = FileAttributes
FileCount+1
EndIf
Next
Else
TempDirectory = DirectoryEntryName(CurrentDirectoryID)
If TempDirectory <> "." And TempDirectory <> ".."
If Recursive = 1
Depth + 1
GetFileList(StartDirectory + TempDirectory + #PS$,LFiles(),Pattern,Recursive)
EndIf
EndIf
EndIf
Wend
FinishDirectory(CurrentDirectoryID)
EndIf
ProcedureReturn FileCount
EndProcedure
Procedure SortFileListByDate(List InputFiles.file(),List OutPutFiles.file(),Order=#PB_Sort_Ascending,DateOption=#PB_Date_Modified,StartDate=0,EndDate=$7FFFFFFF)
Select DateOption
Case #PB_Date_Modified
SortStructuredList(InputFiles(),Order,(OffsetOf(File\Date)+OffsetOf(FileDate\Modified)),#PB_Integer)
Case #PB_Date_Accessed
SortStructuredList(InputFiles(),Order,(OffsetOf(File\Date)+OffsetOf(FileDate\Accessed)),#PB_Integer)
Case #PB_Date_Created
SortStructuredList(InputFiles(),Order,(OffsetOf(File\Date)+OffsetOf(FileDate\Created)),#PB_Integer)
EndSelect
If StartDate
ForEach InputFiles()
Select DateOption
Case #PB_Date_Modified
If (InputFiles()\Date\Modified >= StartDate And InputFiles()\Date\Modified <= EndDate)
AddElement(OutPutFiles())
CopyStructure(@InputFiles(),@OutPutFiles(),File)
EndIf
Case #PB_Date_Accessed
If (InputFiles()\Date\Modified >= StartDate And InputFiles()\Date\Accessed <= EndDate)
AddElement(OutPutFiles())
CopyStructure(@InputFiles(),@OutPutFiles(),File)
EndIf
Case #PB_Date_Created
If (InputFiles()\Date\Modified >= StartDate And InputFiles()\Date\Created <= EndDate)
AddElement(OutPutFiles())
CopyStructure(@InputFiles(),@OutPutFiles(),File)
EndIf
EndSelect
Next
EndIf
ProcedureReturn ListSize(OutPutFiles())
EndProcedure
Procedure SortFileListBySize(List InputFiles.file(),List OutPutFiles.file(),Order=#PB_Sort_Ascending,MinimumSize=0,MaximumSize.q=$7FFFFFFFFFFFFFFF)
SortStructuredList(InputFiles(),Order,OffsetOf(File\Size),#PB_Integer)
If MinimumSize
ForEach InputFiles()
If (InputFiles()\Size >= MinimumSize And InputFiles()\Size <= MaximumSize)
AddElement(OutPutFiles())
CopyStructure(@InputFiles(),@OutPutFiles(),File)
EndIf
Next
EndIf
ProcedureReturn ListSize(OutPutFiles())
EndProcedure
Global NewList AllFiles.File()
Global NewList FilteredFiles.File()
Global NewList ReFilteredFiles.File()
Global StartDate = Date(2019,1,1,0,0,0)
Global EndDate = Date()
Global Path.s = #PB_Compiler_Home
If GetFileList(Path,AllFiles(),"*.pb|*.pbi") ;get all pb files in the directory recursively
If SortFileListByDate(Allfiles(),FilteredFiles(),#PB_Sort_Ascending,#PB_Date_Modified,StartDate,EndDate) ;sort and filter by date between dates
ForEach FilteredFiles()
Debug FilteredFiles()\Name
Debug FormatDate("%dd/%mm/%yyyy",FilteredFiles()\Date\Modified)
Next
EndIf
Debug "++++++++++++++++++++++++++++++++++++++++++++++++++"
If SortFileListBySize(FilteredFiles(),ReFilteredFiles(),#PB_Sort_Descending,10000,100000) ;re-sort and filter by size between sizes
ForEach ReFilteredFiles()
Debug ReFilteredFiles()\Name
Debug Str(ReFilteredFiles()\Size / 1024) + " KB"
Next
EndIf
EndIf