AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Verzeichnisse nach Dateien durchsuchen
Thema durchsuchen
Ansicht
Themen-Optionen

Verzeichnisse nach Dateien durchsuchen

Ein Thema von renekr · begonnen am 11. Aug 2006 · letzter Beitrag vom 11. Aug 2006
Antwort Antwort
renekr

Registriert seit: 27. Feb 2005
Ort: Karlsbad
534 Beiträge
 
Delphi 2007 Enterprise
 
#1

Verzeichnisse nach Dateien durchsuchen

  Alt 11. Aug 2006, 10:33
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
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Verzeichnisse nach Dateien durchsuchen

  Alt 11. Aug 2006, 10:48
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
Klaus
  Mit Zitat antworten Zitat
DocE

Registriert seit: 25. Mär 2004
108 Beiträge
 
#3

Re: Verzeichnisse nach Dateien durchsuchen

  Alt 11. Aug 2006, 10:54
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
  Mit Zitat antworten Zitat
DocE

Registriert seit: 25. Mär 2004
108 Beiträge
 
#4

Re: Verzeichnisse nach Dateien durchsuchen

  Alt 11. Aug 2006, 11:06
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
  Mit Zitat antworten Zitat
renekr

Registriert seit: 27. Feb 2005
Ort: Karlsbad
534 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Verzeichnisse nach Dateien durchsuchen

  Alt 11. Aug 2006, 11:14
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.
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Verzeichnisse nach Dateien durchsuchen

  Alt 11. Aug 2006, 11:19
Klar wird der StartFolder zum RootFolder, aber Du weißt doch wo Du zu suchen
angefangen hast? Oder nicht?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
renekr

Registriert seit: 27. Feb 2005
Ort: Karlsbad
534 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Verzeichnisse nach Dateien durchsuchen

  Alt 11. Aug 2006, 11:24
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.
  Mit Zitat antworten Zitat
DocE

Registriert seit: 25. Mär 2004
108 Beiträge
 
#8

Re: Verzeichnisse nach Dateien durchsuchen

  Alt 11. Aug 2006, 11:25
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
  Mit Zitat antworten Zitat
renekr

Registriert seit: 27. Feb 2005
Ort: Karlsbad
534 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Verzeichnisse nach Dateien durchsuchen

  Alt 11. Aug 2006, 11:29
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:07 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