Einzelnen Beitrag anzeigen

Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: ListFiles mit FindFirst beschleunigen

  Alt 13. Jan 2010, 08:17
Hallo Moony,

Über das Netzwerk ist es tatsächlich so, dass die Zeiten deutlich länger sind als auf Lokalen Festplatten des Rechners.

Deinen Algo würde ich erstmal so anpassen wie auch schon von anderen vorgeschlagen:

Delphi-Quellcode:
procedure ListFiles(Path, Ext: string; FileList: TStrings; Attr: integer);
var
  SR : TSearchRec;
  CheckAttrAndNotRefreshAll : Boolean; // neu
begin
  if Length(Path) > 0 then
    Path := IncludeTrailingBackslash(Path);

  //Ext := UpperCase(Ext); // neu
  CheckAttrAndNotRefreshAll := (fmPhoto.ImageSet.CheckAttr) and (not fmPhoto.DoRefreshAll); // neu

  if FindFirst(Path + '*' + Ext, faAnyFile, SR) = 0 then // Stern eingefügt
  begin
    FileList.BeginUpdate;
    try
      repeat
        if (SR.Attr and faDirectory) = 0 then
        begin
           if CheckAttrAndNotRefreshAll then
           begin
             if (SR.Attr and Attr) = 0 then
               Continue;
           end;

           // Brauchst du das Hier wirklich?
           //if UpperCase(ExtractFileExt(SR.Name)) = Ext then
           //begin
             FileList.Add(SR.Name);
           //end;
        end;
      until FindNext(SR) <> 0;
    finally
      FileList.Endupdate;
    end;
    SysUtils.FindClose(SR);
  end;
end;
Wobei ich nicht ganz verstehe, wie du die MEthode aufrufst. Bei mir würde meine Version so aussehen:
Listfiles('X:\TestVieleDateien', '.jpg', ListBox1.Items, 0); Somit wird auch der Vergleich auf die Variable Ext unnötig. Oder hab ich das jetzt was falsch verstanden?

Greez, Chris

[EDIT]Quelltext angepasst wegen Beitrag #9, #11, #13. Danke DeddyH und himitsu[/EDIT]
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat