Einzelnen Beitrag anzeigen

DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#16

AW: Schnelle Methode, um eine Dateiliste zu erstellen

  Alt 24. Feb 2021, 10:46
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;
  Mit Zitat antworten Zitat