To enable FileUtil in your project, please add LazUtils into required packages. Follow these steps:
- Go to Lazarus IDE Menu > Project > Project Inspector
- In the Project Inspector dialog window, click Add > New Requirement
- In the New Requirement dialog window, find LazUtils package then click OK.
procedure FindAllFiles(AList: TStrings; const SearchPath: String; SearchMask: String = ''; SearchSubDirs: Boolean = True; DirAttr: Word = faDirectory); function FindAllFiles(const SearchPath: String; SearchMask: String = ''; SearchSubDirs: Boolean = True): TStringList;
FindAllFiles looks for files matching the SearchMask in the SearchPath directory and, if specified, its subdirectories, and populates a stringlist with the resulting filenames.
The mask can be a single mask like you can use with the FindFirst/FindNext functions,
or it can consist of a list of masks, separated by a semicolon (;).
Spaces in the mask are treated as literals.
Parameter DirAttr is int file attribute: if file-system item has this attribute(s), it is considered as a directory. It can be faDirectory, faSymLink, (faDirectory+faSymLink) or maybe another bits can be used.
There are two overloaded versions of this routine. The first one is a procedure and assumes that the receiving stringlist already has been created. The second one is a function which creates the stringlist internally and returns it as a function result. In both cases the stringlist must be destroyed by the calling procedure.
uses ..., FileUtil, ... var PascalFiles: TStringList; begin PascalFiles := TStringList.Create; try FindAllFiles(PascalFiles, LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true); //find e.g. all pascal sourcefiles ShowMessage(Format('Found %d Pascal source files', [PascalFiles.Count])); finally PascalFiles.Free; end; // or begin //No need to create the stringlist; the function does that for you PascalFiles := FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true); //find e.g. all pascal sourcefiles try ShowMessage(Format('Found %d Pascal source files', [PascalFiles.Count])); finally PascalFiles.Free; end;
IMPORTANT NOTE: The function "FindAllFiles" creates the stringlist internally. This may look very convenient at first sight, but it is very easy to create memory leaks that way:
// DON'T EVER DO THIS !!!! - There is no way to destroy the stringlist created by FindAllFiles. Listbox1.Items.Assign(FindAllFiles(LazarusDirectory, '*.pas;*.pp;*.p;*.inc', true);