Ich bin mir nicht sicher, ob ich das richtig verstanden habe, aber hier mal ein Entwurf mit Verwendung der
System.IOUtils. Erstmal ungetestet und ohne Berücksichtigung der Performance.
Delphi-Quellcode:
procedure ListFiles(const Root: string; LstInclude, LstExclude, Target: TStrings);
var
path: string;
S: string;
skip: Boolean;
begin
if (LstInclude <> nil) and (LstInclude.Count > 0) then begin { Includes vorhanden? }
for path in LstInclude do
Target.AddStrings(TDirectory.GetFiles(TPath.Combine(Root, path), '*.*', TSearchOption.soAllDirectories));
end
else if (LstExclude <> nil) and (LstExclude.Count > 0) then begin { Excludes vorhanden? }
for path in TDirectory.GetDirectories(Root, '*', TSearchOption.soAllDirectories) do begin
{ ist es ein Exclude Path? }
skip := False;
for S in LstExclude do
if path.StartsWith(TPath.Combine(Root, S), True) then begin
skip := True;
Break;
end;
if not skip then
Target.AddStrings(TDirectory.GetFiles(path, '*.*', TSearchOption.soTopDirectoryOnly));
end;
end
else begin { keine Einschränkungen }
Target.AddStrings(TDirectory.GetFiles(Root, '*.*', TSearchOption.soAllDirectories));
end;
end;