Autor Beitrag
SQLException
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 89

WinXP + D5 Enterprise
Win2k + D6 Personal
BeitragVerfasst: Mi 18.05.05 00:01 
abend.

man betrachte bitte mein letztes posting:

www.delphi-forum.de/viewtopic.php?t=41815

wie kann ich z. b. nach MP3s und WMVs gleichzeitig suchen/anzeigen lassen?

oder: wie kann ich alle dateien (ob mp3 oder wmv) anzeigen lassen, nur keine ordner? da ich ein verzeichnis nur mit mp3s und wmvs habe, wäre das auch ok.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 18.05.05 08:14 
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
function GetAllFiles(Suchmaske1, Suchmaske2: String; var Ergebnisliste: TStringList;
  IncludeSubDirs: Boolean): Boolean; overload;
var Search: TSearchRec;
  //Suchinformationen der aktuellen Suche
  Verzeichnis, Dateimaske: String;
  //Teile der Suchmaske einzeln
begin
  Result:=False;
  //Zunächst False als Rückgabewert, damit dann nur auf True geändert
  //werden muss, wenn etwas gefunden wird
  Dateimaske := ExtractFileName(Suchmaske);
  //Dateiname
  Verzeichnis := ExtractFilepath(Suchmaske);
  //Verzeichnisname
  Verzeichnis:=IncludeTrailingPathDelimiter(Verzeichnis);
  // alle Dateien suchen
  If FindFirst(Suchmaske1, $23, Search)= 0 then begin
  //Wenn überhaupt eine Datei gefunden werden kann
    repeat
      Application.ProcessMessages;
      //Rechenzeit freigeben
      Ergebnisliste.Add(Verzeichnis+Search.Name);
      //Zur Ergebnisliste hinzufügen
      Result:=True;
      //Rückgabewert True
    until FindNext(Search)<>0;
    //Bis ein Fehlercode zurückgegeben wird, also keine passende
    //Datei mehr vohanden ist
  end;
  SysUtils.FindClose(Search);
  //Unbedingt Suche hier schließen, da sonst die Verzeichnisse gesperrt
  //bleiben, bis die Anwendung beendet wird.
  //Für das folgende Durchsuchen der Verzeichnisse wird nämlich die nächste
  //FindFirst, FindNext, FindClose - Sequenz benutzt
  If FindFirst(Suchmaske2, $23, Search)= 0 then begin
  //Wenn überhaupt eine Datei gefunden werden kann
    repeat
      Application.ProcessMessages;
      //Rechenzeit freigeben
      Ergebnisliste.Add(Verzeichnis+Search.Name);
      //Zur Ergebnisliste hinzufügen
      Result:=True;
      //Rückgabewert True
    until FindNext(Search)<>0;
    //Bis ein Fehlercode zurückgegeben wird, also keine passende
    //Datei mehr vohanden ist
  end;
  SysUtils.FindClose(Search);
  //Unbedingt Suche hier schließen, da sonst die Verzeichnisse gesperrt
  //bleiben, bis die Anwendung beendet wird.
  //Für das folgende Durchsuchen der Verzeichnisse wird nämlich die nächste
  //FindFirst, FindNext, FindClose - Sequenz benutzt
  If IncludeSubDirs then
    { Unterverzeichnisse durchsuchen, wenn angegeben }
    If FindFirst(Verzeichnis + '*.*',fadirectory, Search)= 0 then begin
    //Wenn überhaupt ein Verzeichnis gefunden werden kann
      repeat
        If((search.attr and fadirectory)=fadirectory)
          and(search.name[1]<>'.') then begin
        //Wenn ein (Unter-) Verzeichnis vorliegt, in diesem nachschauen
          If GetAllFiles(Verzeichnis+ Search.Name + '\' + Dateimaske,
            Ergebnisliste,True) then Result:=True;
          //Wenn Dateien im rekursiven Aufruf gefunden wurden,
          //Rückgabewert auf True setzen
        end;
        Application.ProcessMessages;
        //Rechenzeit freigeben
      until FindNext(Search) <> 0;
      //Bis ein Fehlercode zurückgegeben wird, also kein passendes
      //Verzeichnis mehr vohanden ist
    end;
  SysUtils.FindClose(Search);
end;

Hab das jetzt on-the-fly beim Posten für mehrere Suchmasken verändert, ich hoffe der Aufruf mit folgenden Parametern geht und ich hab nix vergessen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  Results: TStringList;
begin
  Results := TStringList.Create;
  if GetAllFiles('c:\test\*.mp3', 'c:\test\*.wma', Results, False) then
    ShowMessage('Dateien gefunden:' + #13 + Results.Text);
  Results.Free;
end;
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 18.05.05 08:39 
Wie steht´s damit? Ist seit 2003 in den FAQs. :roll:
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: Mi 18.05.05 09:58 
user profile iconSQLException hat folgendes geschrieben:
wie kann ich z. b. nach MP3s und WMVs gleichzeitig suchen/anzeigen lassen?

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
procedure FindFiles(const Path: String; const Ext: array of String; Result: TStrings);

  procedure SearchFiles(const Path: String; const Ext: array of String; Result: TStrings);
  var
    SR: TSearchRec;
    I: Integer;
  begin
    if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
    begin
      repeat
        if (SR.Name <> '.') and (SR.Name <> '..') then
        begin
          if (SR.Attr and faDirectory) = faDirectory then
            SearchFiles(IncludeTrailingPathDelimiter(Path + SR.Name), Ext, Result)
          else
            for I := Low(Ext) to High(Ext) do
              if SameText(Ext[I], ExtractFileExt(SR.Name)) then
              begin
                Result.Add(Path + SR.Name);
                Break;
              end;
        end;
      until FindNext(SR) <> 0;
      FindClose(SR);
    end;
  end;

begin
  Result.Clear;
  SearchFiles(IncludeTrailingPathDelimiter(Path), Ext, Result);
end;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
  FindFiles('C:\MeinOrdner', ['.mp3', '.wmv'], ListBox1.Items);
end;

_________________
Ciao, Sprint.
SQLException Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 89

WinXP + D5 Enterprise
Win2k + D6 Personal
BeitragVerfasst: Mi 18.05.05 13:20 
user defined image