Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Verzeichnisse nach Dateien durchsuchen (https://www.delphipraxis.net/74939-verzeichnisse-nach-dateien-durchsuchen.html)

renekr 11. Aug 2006 09:33


Verzeichnisse nach Dateien durchsuchen
 
Hi,
Ich habe mal die Beiträge im forum durchgestöbert und habe was gefunden:
Verzeichnisse nach Dateien durchsuchen


Nun hätte ich eine Frage zu der Suche.

Ich will folgendes machen:
Ich suche alle *.exe und *.dll von einem Pfad zb: C:\Programm Files\Test.


Da ich in mehreren Ordnern die selben Dateinamen habe würde ich auch noch gerne den Pfad zu dem File rausbekommen.

Wie kann ich das in der Funktion machen?

Ich habe ja bei jedem gefundenen File einen RootFolder,nur zeigt mir dieser alles an also c:\Programm Files\Test1 zb.:

Ich will aber nur den Ordner namen haben da wo die Datei liegt , also Test1?

mfg

Klaus01 11. Aug 2006 09:48

Re: Verzeichnisse nach Dateien durchsuchen
 
Du läßt rekursiv suchen?

Wenn ja, dann hast Du den StartFolder (von wo die Suche begonnen wird) z.B. 'c:\Program Files'
Der RootFolder gibt Dir den gesamten Pfad . z.B. 'c:\Program files\test1'

Das Verzeichnis bekommst Du dann so.

Verz := copy(RootFolder,lenght(StartFolder),MaxInt);
-> test1

Grüße
Klaus

DocE 11. Aug 2006 09:54

Re: Verzeichnisse nach Dateien durchsuchen
 
Hallo renekr,

es handelt sich dabei um eine rekursive Funktion, die jeweils wieder mit dem Unterordner als RootFolder aufegrufen wird, wenn Sie einen Ordner findet (faDirectory) und Recurse true ist. Somit erhältst Du immer mit RootFolder + SR.Name den gesamten Pfad inkl. Dateinamen.

Ein Beispiel:

Du durchsuchst C:\ -> FindAllFiles('c:\', '*.*');


Die Funktion findet zunächst die Ordner:

c:\Programme\
Funktion ruft rekursiv auf: FindAllFiles('c:\Programme\', '*.*');
c:\Programme\test.exe
...

c:\Bilder\
Funktion ruft rekursiv auf: FindAllFiles('c:\Bilder\', '*.*');
c:\Bilder\test.bmp
...

Zum Schluss den angegebenen Pfad selbst:
c:\test.txt
c:\test.jpg
...


Grüsse
...Doc

DocE 11. Aug 2006 10:06

Re: Verzeichnisse nach Dateien durchsuchen
 
Oh, habe die Frage wohl falsch verstanden...

Die Lösung von Klaus ist fast richtig...

Verz := copy(RootFolder,length(StartFolder)+1,MaxInt);

Und noch eins dazu: Achte darauf, dass der StartFolder den abschließenden Backslash "\" enthält, sonst erhältst Du diesen immer mit, also

bei 'C:\Programme' als StartFolder
und 'C:\Programme\Test1' als RootFolder
erhältst Du '\Test1'

bei 'C:\Programme\' als StartFolder
und 'C:\Programme\Test1' als RootFolder
erhältst Du 'Test1'

Alternativ (ohne Backslash) length(StartFolder)+2 verwenden.


Grüsse
...Doc

renekr 11. Aug 2006 10:14

Re: Verzeichnisse nach Dateien durchsuchen
 
Hi,
Danke für die Schnelle Info.
Habs schon kapiert ,nur kann es sein das in der funktion der Start Folder zum Rootfolder wird ?
Also der Übergebene StartFolder c:\Program files wird ja beim Findnext angepasst und daraus entsteht der RootFodler?

Oder liege ich da falsch.

Ich habe ja den Code teilweise abgeändert, mit Datum usw. noch.

Vez nach Dateien suchen

Danek.

Klaus01 11. Aug 2006 10:19

Re: Verzeichnisse nach Dateien durchsuchen
 
Klar wird der StartFolder zum RootFolder, aber Du weißt doch wo Du zu suchen
angefangen hast? Oder nicht?

Grüße
Klaus

renekr 11. Aug 2006 10:24

Re: Verzeichnisse nach Dateien durchsuchen
 
Hi,
Klaro weiß i das,aber das müsste ich dann in der Procedure fest reinschreiben.

Ich habe nun einfach der Procedure nen 2. StartParameter mit übergeben,dann bin ich auch Flexible.

vielen Dank.

DocE 11. Aug 2006 10:25

Re: Verzeichnisse nach Dateien durchsuchen
 
Also der übergebene Parameter, z.B. StartFolder, wird "nach außen" nicht verändert. Nur intern bekommt er ggf. einen Backslash verpasst. Beim FindNext wird eigentlich gar nichts verändert.

Also wenn Du das ganze wir folgt aufrufst:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var StartFolder: string;
begin

  StartFolder := 'C:\Programme';
 
  FindAllFiles(StartFolder,'*.*');

  ShowMessage(StartFolder); // <- ist immernoch 'C:\Programme'

end;

Grüsse
...Doc

renekr 11. Aug 2006 10:29

Re: Verzeichnisse nach Dateien durchsuchen
 
Hi,

Ja so ätte i es a machen können,Ich habe halt den Start Parameter nicht Global gesetzt sondern in der Procedure,und wenn i da mit Roofolder arbeite wird dieser verändert.
Ich habe nun einen 2. Parameter dazu gemacht und da den selben Such Fodler nochmals übergeben.
Aber deine Lösung ist glaube ich praktischer.

aufruf:
[/delphi]
FindAllFilesPDES(ProgramFilesDir+'\Becker\',Progra mFilesDir+'\Test\','*.exe*',true);
[delphi]

Ich habe noch was abgeändert,und zwar wollte ich das ich Rekursive suche, aber wen ner ein Verz. gefunden hat sollte er nicht mehr rek. suchen.
Weil meine Dateien nur im 1. Unterverz. liegen,mehrere sind nicht nötig.


Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 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