Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.168 Beiträge
 
Delphi 12 Athens
 
#8

Re: routine aendern(speichern in listbox>speichern in has

  Alt 10. Jun 2009, 15:48
Delphi-Quellcode:
procedure GetFilesInDirectory(const Directory, Mask: String;
    List: TStringDictionary; WithSubDirs, ClearList: Boolean);

  procedure ScanDir(const Directory: String);
    var
      SR: TSearchRec;

    begin
      if FindFirst(Directory + Mask, faAnyFile - faDirectory, SR) = 0 then
        try
          repeat
            //if not List.Contains(Directory + SR.Name) then
              List.Add(Directory + SR.Name);
          until FindNext(SR) <> 0;
        finally
          FindClose(SR);
        end;

      if WithSubDirs then begin
        if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then try
          repeat
            if ((SR.attr and faDirectory) = faDirectory) and
               (SR.Name <> '.') and (SR.Name <> '..') then
              ScanDir(Directory + SR.Name + '\');
          until FindNext(SR) <> 0;
        finally
          FindClose(SR);
        end;
      end;
    end;

  begin
    if ClearList then
      List.Clear;
    if Directory = 'then Exit;
    ScanDir(IncludeTrailingPathDelimiter(Directory));
  end;
Das ganze könnte man dann noch so optimieren, das gleich mehere Masken übergeben werden könnte,
man nur noch eine Suchschleife in der Funktion hat und selber filtert.
Zusätzlich muß die Suchfunktion dann auch nur noch einmal aufgerufen werden.

[edit]
Prüfung auf doppelte Einträge wieder rausgemacht (auskommentiert), denn Doppeltes kann hier ja nicht vorkommen


[add]
http://www.delphipraxis.net/internal...034817#1034817
Delphi-Quellcode:
procedure GetFilesInDirectory(const Directory, Mask: String;
    List: TStringDictionary; WithSubDirs, ClearList: Boolean);

  procedure ScanDir(const Directory: String);
    var
      SR: TSearchRec;

    begin
      if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then try
        repeat
          if (SR.Name <> '.') and (SR.Name <> '..') then
            if SR.attr and faDirectory <> 0 then
            begin
              if WithSubDirs then
                ScanDir(Directory + SR.Name + '\')
            end
            else if MatchText(Mask, SR.Name, False) then
              List.Add(Directory + SR.Name);
        until FindNext(SR) <> 0;
      finally
        FindClose(SR);
      end;
    end;

  begin
    if ClearList then
      List.Clear;
    if Directory <> 'then
      ScanDir(IncludeTrailingPathDelimiter(Directory));
  end;



GetFilesInDirectory(direct, '*.jpg|*.png|*.pdf|*.bmp|*.gif*', Hashlist, True, True);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat