Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ordner nach *.exe durchsuchen (https://www.delphipraxis.net/130111-ordner-nach-%2A-exe-durchsuchen.html)

Flodding 3. Mär 2009 16:24


Ordner nach *.exe durchsuchen
 
Guten Abend zusammen...

ich habe folgenden Quellcode mit dem ich alle Ordner in einem Ordner auflisten kann... ohne Recursive suche und unterdateien ganz einfach so:

--Ordner <-- Zu durchsuchender Ordner
----Ordner im Ordner 1 <-- Erster gefundener Ordner im Ordner
----Ordner im Ordner 2 <-- Zweiter gefundener Ordner im Ordner
----usw.

das ganze lasse ich mit in eine Listbox auflisten.

nun muss ich aber in den unterordnern jeweils noch eine *.exe Datei finden und die in eine andere Listbox eintragen lassen...

ich hab etliche male versucht die FindFiles-funktionen die man ja überall findet um zu schreiben, jedoch ohne ergebniss...

hier mal der code der die ordner in einem ordner NICHT rekursiv findet und auflistet ;)

Delphi-Quellcode:
procedure DirectorySearch(ADirectory: string; AMask: String);
var
  SR: TSearchRec;
begin
    if FindFirst(ADirectory + '*.*', faDirectory, SR)=0 then
    begin
      repeat
        if (SR.Attr and faDirectory = faDirectory) and (sr.Name<>'.') and (sr.Name<>'..') then
        with form1 do begin
        AdvSmoothListBox1.Items.Add.Caption:=(sr.Name);
        AdvSmoothListBox1.Items.Sort;
        end;
      until FindNext(SR)<>0;
      FindClose(SR);
    end;
end;
aufgerufen mit:

Delphi-Quellcode:
DirectorySearch('SUCHORDNER','*.*');
wie gesagt es müssen nur die *.exe Dateien in den jeweiligen unterordnern gefunden werden und in eine weitere listbox aufgelistet werden...

vielen dank im voraus für jede antwort :)

vsti 3. Mär 2009 16:33

Re: Ordner nach *.exe durchsuchen
 
Einfach neues TSearchRec und neues FindFirst/Findnext mit dem Filter '*.exe' und dem Attribut faAnyFile

Flodding 3. Mär 2009 16:38

Re: Ordner nach *.exe durchsuchen
 
an welcher stelle?! als neue Procedure?

sorry ich hab echt lange dran probiert und jetzt verlässts mich langsam...

mr_emre_d 3. Mär 2009 16:50

Re: Ordner nach *.exe durchsuchen
 
Delphi-Quellcode:
...
  if FindFirst(ADirectory + '*.exe', faDirectory, SR)=0 then
  // C:\*.exe -- so in etwa sollte es aussehen
...

Satty67 3. Mär 2009 16:55

Re: Ordner nach *.exe durchsuchen
 
Einfach die Liste mit den Ordnern durchgehen und da nach Exe suchen:
Delphi-Quellcode:
// Eigentlich Blödsinn, für jede Aufgabe eine extra Procedure
// könnte man prima mit ein paar Parametern in einer lösen
// aber zu leichteren Verständnis
procedure ExeSearch(ADirectory: String);
var
  SR: TSearchRec;
begin
    if FindFirst(ADirectory + '\*.exe', faAnyFile, SR)=0 then
    begin
      repeat
        with form1 do begin
          ListBox1.Items.Add(sr.Name);
        end;
      until FindNext(SR)<>0;
      FindClose(SR);
    end;
end;

// Aufrufen etwa so
var
  i : Integer;
begin
  for i := 0 to AdvSmoothListBox1.Items.Count do
  begin
    ExeSearch(AdvSmoothListBox1.Items[i]);
  end;
end;
Ich bin auch kein Code-Spezialist, aber bei deiner ersten Procedure könnte man einiges übersichtlicher machen:

Flodding 3. Mär 2009 16:59

Re: Ordner nach *.exe durchsuchen
 
Zitat:

Zitat von mr_emre_d
Delphi-Quellcode:
...
  if FindFirst(ADirectory + '*.exe', faDirectory, SR)=0 then
  // C:\*.exe -- so in etwa sollte es aussehen
...

das funktioniert so nicht... das hatte ich schon :D

Flodding 3. Mär 2009 17:05

Re: Ordner nach *.exe durchsuchen
 
Zitat:

Zitat von Satty67
Delphi-Quellcode:
  for i := 0 to AdvSmoothListBox1.Items.Count do
  begin
    ExeSearch(AdvSmoothListBox1.Items[i]);
  end;

--> Incompatible Typen: 'String' und 'AdvSmoothListBoxItem'

Satty67 3. Mär 2009 17:14

Re: Ordner nach *.exe durchsuchen
 
Ok, kenne AdvSmoothListBox1 nicht. dachte Items ist eine StringList.

ich muss jetzt etwas raten, funktioniert:
Delphi-Quellcode:
  ExeSearch(AdvSmoothListBox1.Items[i].Caption);
Ansonsten musst Du selber schauen, wo die Strings gespeicheert sind.

Flodding 3. Mär 2009 17:27

Re: Ordner nach *.exe durchsuchen
 
Listenindex überschreitet das Maximum (12)

DeddyH 3. Mär 2009 17:29

Re: Ordner nach *.exe durchsuchen
 
Delphi-Quellcode:
for i := 0 to AdvSmoothListBox1.Items.Count -1 do
Wenn das erste Element den Index 0 hat, hat das letzte den Index Count -1.

Matze 3. Mär 2009 17:30

Re: Ordner nach *.exe durchsuchen
 
Delphi-Quellcode:
for i := 0 to AdvSmoothListBox1.Items.Count - 1 do
Edit: Och Menno Detlef. :mrgreen:

Flodding 3. Mär 2009 17:34

Re: Ordner nach *.exe durchsuchen
 
:D hätt ich auch druf komm könne^^

ja also er startet, gibt keine fehler aus aber er füllt die listbox1 nicht :(

meine liste mit den ordnern wird weiterhin brav gefüllt...

DeddyH 3. Mär 2009 17:43

Re: Ordner nach *.exe durchsuchen
 
Stimmt denn der Pfad? Fehlt nicht evtl. ein Backslash oder ist einer zuviel?

Satty67 3. Mär 2009 17:46

Re: Ordner nach *.exe durchsuchen
 
Vielleicht ist der Fehler im Abruf der Strings von AdvSmoothListBox1 (?) oder noch irgendwo ein Fehler in der ExeSearch.

Poste doch was Du jetzt hast.

€: Werden zwei aufeinander folgende Backslash nicht einfach als einer interpretiert?

Flodding 3. Mär 2009 17:49

Re: Ordner nach *.exe durchsuchen
 
Delphi-Quellcode:
procedure ExeSearch(ADirectory: String);
var
  SR: TSearchRec;
begin
    if FindFirst('.\' + ADirectory + '\*.exe', faAnyFile, SR)=0 then
    begin
      repeat
        with form1 do begin
          ListBox1.Items.Add(sr.Name);
        end;
      until FindNext(SR)<>0;
      FindClose(SR);
    end;
end;
Delphi-Quellcode:
ExeSearch(AdvSmoothListBox1.Items[i].ButtonCaption);
ich habe 12 ordner die durchsucht werden sollen...

so wie es oben steht gibt er mir 12 mal den exenamen von meiner exe^^ aber schonmal ein fortschritt :D

Flodding 3. Mär 2009 17:56

Re: Ordner nach *.exe durchsuchen
 
Habs rausgefunden...

Delphi-Quellcode:
procedure DirectorySearch(ADirectory: string; AMask: String);
var
  SR: TSearchRec;
begin
    if FindFirst(ADirectory + '*.*', faDirectory, SR)=0 then
    begin
      repeat
        if (SR.Attr and faDirectory = faDirectory) and (sr.Name<>'.') and (sr.Name<>'..') then
        with form1 do begin
        AdvSmoothListBox1.Items.Add.Caption:=(sr.Name);
        AdvSmoothListBox1.Items.Sort;
        end;
      until FindNext(SR)<>0;
      FindClose(SR);
    end;
end;

procedure ExeSearch(ADirectory: String);
var
  SR: TSearchRec;
begin
    if FindFirst('.\SUCHORDNER\' + ADirectory + '\*.exe', faAnyFile, SR)=0 then
    begin
      repeat
        with form1 do begin
          ListBox1.Items.Add(sr.Name);
        end;
      until FindNext(SR)<>0;
      FindClose(SR);
    end;
end;
der fehler war in der ExeSearch... ich musste noch den SUCHORDNER angeben anstelle von '.\'... sorry!!

und nochmal der rest für die nachwelt :P

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
DirectorySearch('.\SUCHORDNER\','*.*');
for i := 0 to AdvSmoothListBox1.Items.Count-1 do
begin
ExeSearch(AdvSmoothListBox1.Items[i].Caption);
end;
end;

Satty67 3. Mär 2009 18:01

Re: Ordner nach *.exe durchsuchen
 
Nächster Schritt wäre jetzt wohl mit absoluten Pfaden zu arbeiten (also C:\...).

Glaube '.\' greift auf den aktuellen Explorer-Ordner zu, der sich während des Programmablaufs auch gerne mal ändern kann

Flodding 3. Mär 2009 18:02

Re: Ordner nach *.exe durchsuchen
 
ist für einen wechseldatenträger...

DeddyH 3. Mär 2009 18:25

Re: Ordner nach *.exe durchsuchen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab mal ein Beispiel in Delphi 7 erstellt und angehängt, so ist das IMHO schön kurz und flexibel.

Flodding 3. Mär 2009 18:51

Re: Ordner nach *.exe durchsuchen
 
hehe auf jeden fall kürzer als die meinige variante :D

ich danke dir :)

++

mr_emre_d 3. Mär 2009 19:09

Re: Ordner nach *.exe durchsuchen
 
Zitat:

Zitat von Flodding
Zitat:

Zitat von mr_emre_d
Delphi-Quellcode:
...
  if FindFirst(ADirectory + '*.exe', faDirectory, SR)=0 then
  // C:\*.exe -- so in etwa sollte es aussehen
...

das funktioniert so nicht... das hatte ich schon :D

Zitat:

Zitat von Flodding
...
Delphi-Quellcode:
  if FindFirst('.\SUCHORDNER\' + ADirectory + '\*.exe', faAnyFile, SR)=0 then
...
der fehler war in der ExeSearch... ich musste noch den SUCHORDNER angeben anstelle von '.\'... sorry!!

:P


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz