unit u_findAllFiles;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TfrmFileFind }
TfrmFileFind = class(TForm)
Button1: TButton;
edPath: TEdit;
lblCount: TLabel;
lbFiles: TListBox;
procedure Button1Click(Sender: TObject);
private
public
procedure exFindAllFiles(FilesList : TStringList; StartDir, FileMask : string);
end;
var
frmFileFind : TfrmFileFind;
implementation
{$R *.lfm}
procedure TfrmFileFind.exFindAllFiles(FilesList: TStringList; StartDir, FileMask: string);
var
SR : TSearchRec;
DirList : TStringList;
IsFound : Boolean;
i : integer;
begin
{ Build a list of the files in directory StartDir!) }
IsFound:=FindFirst(StartDir+FileMask,faAnyFile,SR) = 0;
while IsFound do
begin
if (Pos('/.',SR.name) = 0 ) and
(SR.Name[1] <> '.') then
begin
FilesList.Add(StartDir+SR.Name);
end;
IsFound:=FindNext(SR) = 0;
end;
FindClose(SR);
// Build a list of subdirectories
DirList:=TStringList.Create;
IsFound:=FindFirst(StartDir+Filemask,faAnyFile,SR) = 0;
while IsFound do
begin
if ((SR.Attr and faDirectory) <> 0) and
(SR.Name[1] <> '.') and
(Pos('/.',SR.name) = 0 ) then
DirList.Add(StartDir+SR.Name+'/');
IsFound:=FindNext(SR) = 0;
end;
FindClose(SR);
// Scan the list of subdirectories
for i:=0 to DirList.Count - 1 do
begin
exFindAllFiles(FilesList,DirList[i], FileMask);
end;
DirList.Free;
end;
{ TfrmFileFind }
procedure TfrmFileFind.Button1Click(Sender: TObject);
// Example: how to use exFindFiles
var
FilesList : TStringList;
begin
FilesList:=TStringList.Create;
try
exFindAllFiles(FilesList,edPath.Text,'*');
lbFiles.Items.Assign(FilesList);
LblCount.Caption:='Files found: '+IntToStr(FilesList.Count);
finally
FilesList.Free;
end;
end;
end.