Bei LstExclude bleibt Target leider leer. Wenn ich Dateien\Test.txt in LstExclude hinzufüge, bleibt die Liste komplett leer.
Änderre ich TDirectory.GetDirectories zu TDirectory.GetFiles ab, funktioniert es. Aber ist das noch so gewollt?
Hier meine Änderungen, damit auch Dateien funktionieren
Delphi-Quellcode:
function IsDirectory(const aFileName: string): Boolean;
var
R: DWORD;
begin
R := GetFileAttributes(PChar(aFileName));
Result := (R <> DWORD(-1)) and ((R and FILE_ATTRIBUTE_DIRECTORY) <> 0);
end;
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
begin
if IsDirectory(TPath.Combine(Root, path)) then
Target.AddStrings(TDirectory.GetFiles(TPath.Combine(Root, path), '*.*', TSearchOption.soAllDirectories))
else
Target.Add(TPath.Combine(Root, path));
end;
end
else if (LstExclude <> nil) and (LstExclude.Count > 0) then
begin {Excludes vorhanden?}
for path in TDirectory.GetFiles(Root, '*.*', TSearchOption.soAllDirectories) do
begin
{ist es ein Exclude Path?}
for S in LstExclude do
begin
skip := False;
if path.StartsWith(TPath.Combine(Root, S), True) then
begin
skip := True;
Break;
end;
end;
if not skip then
begin
if IsDirectory(TPath.Combine(Root, path)) then
Target.AddStrings(TDirectory.GetFiles(path, '*.*', TSearchOption.soTopDirectoryOnly))
else
Target.Add(TPath.Combine(Root, path));
end;
end;
end
else
begin {keine Einschränkungen}
Target.AddStrings(TDirectory.GetFiles(Root, '*.*', TSearchOption.soAllDirectories));
end;
end;