AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schnelle Dateisuche

Ein Thema von norwegen60 · begonnen am 7. Jan 2008 · letzter Beitrag vom 9. Jan 2008
 
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#1

Schnelle Dateisuche

  Alt 7. Jan 2008, 10:44
Hallo zusammen,

ich verwende schon lange folgenden Code um nach Dateien zu suchen.

Delphi-Quellcode:
function TuFiles.GetAllFiles(var slFiles:TStringlist; sFile:string; bAll, bAllVerz, bNoBAK:Boolean):LongInt;
{++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
{ GetAllFiles                                                            }
{------------------------------------------------------------------------}
{ Erstellung         :  7. 8.97                                          }
{ Letzte Änderung    : 21. 4.03                                          }
{------------------------------------------------------------------------}
{ Sucht ab dem übergebenen Verzeichnis in allen eventuellen Unterverzei- }
{ chnissen nach Dateien, die mit der übergebenen übereinstimmen.         }
{------------------------------------------------------------------------}
{ Übergabeparameter                                                      }
{ slFiles   = Enthält die gefundenen Dateien                             }
{ sFile     = Gibt vor, welche Dateien ab welchem Verzeichnis gesucht    }
{             werden                                                     }
{ bAll      = Legt fest, ob alle Dateien gelistet werden                 }
{              true  = es werden alle Dateien gelistet                   }
{              false = sobald eine Datei gefunden wurde, die mit sFile   }
{                      übereinstimmt, wird die Suche beendet             }
{ bAllVerz  = Legt fest, in welchen Verzeichnissen gesucht wird          }
{              true  = es werden auch alle Unterverzeichnisse durchsucht }
{              false = es wird nur das übergebene Verzeichnis durchsucht }
{ bNoBAK    = Legt fest, ob auch Sicherungsdateien gelistet werden       }
{              true  = Sicherungsdateien werden nicht gelistet           }
{              false = Sicherungsdateien werden gelistet                 }
{++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
var
  Search: TSearchRec;

begin
// Application.ProcessMessages;
// if bAbort then Exit;

// Panel2.Caption:=format(' Dokument wird in %s gesucht',[ExtractFilePath(sFile)]);
// Panel2.Refresh;
 { alle Dateien suchen }
  if SysUtils.FindFirst(sFile, $23, Search)= 0 then
    repeat
      if not (bNoBak) or ((bNoBAK) and not (BakDatei(Search.Name))) then
          slFiles.add(UpperCase(ExtractFilePath(sFile)+Search.Name));
    until (SysUtils.FindNext(Search)<>0) or ((slFiles.Count>0) and not (bAll));
  {$IFDEF Win32}
    SysUtils.FindClose(Search);
  {$ENDIF}

  if ((bAllVerz) and ((slFiles.Count=0) or ((slFiles.Count>0) and bAll))) then
  begin { Unterverzeichnisse durchsuchen }
    if (SysUtils.FindFirst(ExtractFilePath(sFile) + '*.*',fadirectory, Search)= 0) then
    begin
      repeat
         if((search.attr and fadirectory)=fadirectory)and(search.name[1]<>'.') then
           GetAllFiles(slFiles, ExtractFilePath(sFile)+ Search.Name + '\' + ExtractFileName(sFile),bAll, bAllVerz, bNoBAK);
      until SysUtils.FindNext(Search) <> 0;
    end;
  {$IFDEF Win32}
    SysUtils.FindClose(Search);
  {$ENDIF}
  end;
  Result:=slFiles.Count;
end;
Über den Übergabeparameter bAll kann ich die Suche abbrechen, sobald ich die Datei gefunden habe. In meinem Beispiel,

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  slFiles : TStringlist;
begin
  if slFiles=nil then slFiles := TStringList.Create;
  uHilfs1.SetStart1;
  if uFiles.GetAllFiles(slFiles, 'E:\Eigene Bilder\Privat\U-2003-05-31ac.jpg', false, true, true)>0 then
    ShowMessage(slFiles[0]+' in '+uHilfs1.GetDeltaTime1+' gefunden')
  else
    ShowMessage('Keine Datei in '+uHilfs1.GetDeltaTime1+' gefunden');
    
end;
in dem die Datei in dem Unterverzeichnis "E:\Eigene Bilder\Privat\Digital\U Urlaub\2003 Kroatien" gefunden wird, benötigt die Suche 2.85sec. Führe ich nun dieselbe Suche vom selben Startverzeichnis mit dem Dateimanager 'Total Commander' (s. http://www.ghisler.com/deutsch.htm) aus, benötigt dieser nur Bruchteile einer Sekunde. Wie kann man selber eine so schnelle Suche programmieren?

Danke für ein paar Tips
Gerd
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz