AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Erweiterte Suchfunktion

Ein Thema von argonix · begonnen am 13. Mai 2007 · letzter Beitrag vom 16. Mai 2007
Antwort Antwort
Benutzerbild von argonix
argonix

Registriert seit: 28. Feb 2007
257 Beiträge
 
Delphi 2005 Personal
 
#1

Erweiterte Suchfunktion

  Alt 13. Mai 2007, 17:37
Hallo! Zum Suchen von Dateien verwende ich bis jetzt folgende Funktion aus der CodeLib:
Delphi-Quellcode:
procedure FindAllFiles(MediaList: TStrings; RootFolder: string; Mask: string ='*'; Recurse: Boolean = True; AddFolderNames: Boolean = False; IgnoreMaskAtFolderNames: Boolean = True);
  procedure LFindAllFiles(AParentFolder: String);
  var LSearchRec: TSearchRec;
  begin
    if FindFirst(AParentFolder + '*', faAnyFile, LSearchRec) = 0 then
    begin
      repeat
      Application.ProcessMessages;
        if (LSearchRec.Name <> '.') and (LSearchRec.Name <> '..') then
        begin
          if LSearchRec.Attr and faDirectory = faDirectory then
          begin
            if AddFolderNames and
               (IgnoreMaskAtFolderNames or Like(AnsiLowerCase(LSearchRec.Name), Mask)) then
              MediaList.AddObject(AParentFolder + LSearchRec.Name, TObject(True));
              Application.ProcessMessages;
            if Recurse then
              LFindAllFiles(AParentFolder + LSearchRec.Name + '\');
          end
          else if Like(AnsiLowerCase(LSearchRec.Name), Mask) then
            MediaList.AddObject(AParentFolder + LSearchRec.Name, TObject(False));
        end;
      until FindNext(LSearchRec) <> 0;
      FindClose(LSearchRec);
    end;
  end;
begin
  Mask := AnsiLowerCase(Mask);
  LFindAllFiles(IncludeTrailingPathDelimiter(RootFolder));
end;
Wie kann ich diese Funktion erweiter, dass Sie
1: Mehrere Masken in einem Suchlauf anwendet (z.B. statt Mask:='*.mp3'; auch Mask:='*.mp3;*.wav'; möglich ist) und
2: Man bestimmte Verzeichnisse (z.B. C:\WINDOWS\) von der Suche ausschließen kann?
--
Danke für die Hilfe.
Matthias
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Erweiterte Suchfunktion

  Alt 13. Mai 2007, 17:44
Moin Argonix,

da FindFirstFile nur eine Suchmaske zur Zeit zulässt, wirst Du anhand der gefundenen Dateien selber filtern müssen, welche Du haben willst, und welche nicht.
Beispielsweise könntest Du einen weiteren Parameter deklarieren, der dann die gewünschten Extensions enthält ('.mp3.wav.').

if pos(AnsiLowerCase(ExtractFileExt(...))+'.',AsExtensions) > 0 then .... Analog gilt das dann auch für die auszuschliessenden Pfade, obwohl sich hier wohl eine StringListe als Parameter anböte.

if AExclude.IndexOf(...) > -1 then ...
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von argonix
argonix

Registriert seit: 28. Feb 2007
257 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Erweiterte Suchfunktion

  Alt 14. Mai 2007, 12:35
Das wäre eine Möglichkeit. Aber so dauert die Suche ewig, wenn das Tool erst den kompletten Inhalt eines Laufwerks in einer Liste ablegen muss, die dann durchsucht wird. Geht das vielleicht effizienter? (Es muss ja nicht TSearchRec sein)
Matthias
  Mit Zitat antworten Zitat
Benutzerbild von argonix
argonix

Registriert seit: 28. Feb 2007
257 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Erweiterte Suchfunktion

  Alt 15. Mai 2007, 14:01
Gibt es außer der Windows-Funktion keine andere Suchroutine?
Matthias
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
471 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

Re: Erweiterte Suchfunktion

  Alt 15. Mai 2007, 14:50
Nö, aber es gibt lösungen

guckst du da nach

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
vepman

Registriert seit: 5. Jun 2006
Ort: Bochum
11 Beiträge
 
Delphi 7 Professional
 
#6

Re: Erweiterte Suchfunktion

  Alt 16. Mai 2007, 08:52
Zitat von argonix:
Hallo! Zum Suchen von Dateien verwende ich bis jetzt folgende Funktion aus der CodeLib:
[Wie kann ich diese Funktion erweiter, dass Sie
1: Mehrere Masken in einem Suchlauf anwendet (z.B. statt Mask:='*.mp3'; auch Mask:='*.mp3;*.wav'; möglich ist) und
2: Man bestimmte Verzeichnisse (z.B. C:\WINDOWS\) von der Suche ausschließen kann?
--
Danke für die Hilfe.
Diese Funktion in der DP hat mir beim gleichen Problem geholfen. Diese Funktion von Sir Thornbery ist super schnell.
Das Ausschließen musst du dann per Code erledigen.
Leider wurde die Funktion nicht in dieser Form in der Code-Lib aufgenommen.

Gruss vepman
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:01 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