Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Rekursive Dateisuche lässt Unterverzeichnisse aus (https://www.delphipraxis.net/182538-rekursive-dateisuche-laesst-unterverzeichnisse-aus.html)

Ykcim 30. Okt 2014 16:26

Rekursive Dateisuche lässt Unterverzeichnisse aus
 
Hallo Zusammen,

mit diesem Code, den ich übernommen, nachvollzogen und angepasst habe, möchte ich alle Dateien, in denen ein Teilstring ("4711") vorkommt, in einem StringGrid mit dem jeweiligen Pfad ausgeben. Dabei sollen alle Unterverzeichnisse mit überprüft und die Dateien und Pfade ebenfalls ausgegeben werden.

Delphi-Quellcode:
function FileSearches(const PathName, FileName : string; const InDir : boolean): TRows; // InDir gibt an ob Unterverzeichnisse mit durchsucht werden sollen
var  Rec : TSearchRec;
      Path : string;
begin
   setlength(Result,2,0);
   Path := IncludeTrailingBackslash(PathName);
   if FindFirst(Path + '*'+FileName+'*', faAnyFile and not faDirectory, Rec) = 0 then
      try
         repeat
            SetLength(Result,2,Length(Result[0])+1);
            Result[0,Length(Result[0])-1]:=Path;
            Result[1,Length(Result[0])-1]:=Rec.Name;
         until FindNext(Rec) <> 0;
      finally
         FindClose(Rec);
      end;
   If not InDir then Exit;
   if FindFirst(Path + '*.*', faDirectory, Rec) = 0 then
      try
         repeat
            if (Rec.Attr in [faDirectory]) and (Rec.Name<>'.') and (Rec.Name<>'..') then //An dieser Stelle werden die Bedingungen nicht erfüllt, obwohl Unterverzeichnisse und weitere Treffer vorhanden sind
            FileSearches(Path + Rec.Name, FileName, True);
         until FindNext(Rec) <> 0;
      finally
         FindClose(Rec);
      end;
end;
Ich habe verschiedene Möglichkeiten versucht, aber es wird immer nur im Hauptverzeichnis gesucht und nicht in darin enthaltenen Unterverzeichnissen. Kann mir jemand weiterhelfen?

Vielen Dank
Patrick

DeddyH 30. Okt 2014 16:28

AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
 
Zitat:

Delphi-Quellcode:
if (Rec.Attr in [faDirectory])

Müsste das nicht so lauten?
Delphi-Quellcode:
if (Rec.Attr and faDirectory = faDirectory)

Sir Rufo 30. Okt 2014 16:31

AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
 
Zitat:

Zitat von DeddyH (Beitrag 1278064)
Zitat:

Delphi-Quellcode:
if (Rec.Attr in [faDirectory])

Müsste das nicht so lauten?
Delphi-Quellcode:
if (Rec.Attr and faDirectory = faDirectory)

oder einfach andersherum
Delphi-Quellcode:
if ( faDirectory in Rec.Attr )
sollte auch gehen :)

Was sagt die Doku zu Delphi-Referenz durchsuchenTSearchRec? Nö, geht doch nicht, ist nämlich kein Set ... sondern nur ein Integer

DeddyH 30. Okt 2014 16:32

AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
 
Japp, nur so wie ursprünglich klappt es eben nicht, wenn das Verzeichnis noch weitere Attribute hat.

Der schöne Günther 30. Okt 2014 16:33

AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
 
Warum so kompliziert?
Delphi-Quellcode:
uses System.IOUtils;

procedure listFiles();
const
   searchPattern: String = '*4711*';
var
   fileName: String;
begin
   for fileName in TDirectory.GetFiles('x:\', searchPattern, TSearchOption.soAllDirectories) do
      WriteLn(fileName);
end;

Sir Rufo 30. Okt 2014 16:34

AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1278068)
Warum so kompliziert?
Delphi-Quellcode:
procedure listFiles();
const
   searchPattern: String = '*4711*';
var
   fileName: String;
begin
   for fileName in TDirectory.GetFiles('x:\', searchPattern, TSearchOption.soAllDirectories) do
      WriteLn(fileName);
end;

Weil das ja jeder einfach so machen könnte ;)

Ykcim 30. Okt 2014 16:38

AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
 
Hallo,

erst mal vielen Dank für die schnellen Antworten!!!

Delphi-Quellcode:
if (Rec.Attr and faDirectory = faDirectory)
Ich habe es ausprobiert, aber leider kein Erfolg.
faDirector=16
Rec.Attr=48 Ich weiß beide Werte leider nicht zu interpretieren.

Delphi-Quellcode:
if ( faDirectory in Rec.Attr )
hier kommt die Fehlermeldung
Delphi-Quellcode:
E2015 Operator ist auf diesen Operandentyp nicht anwendbar
Gruß Patrick

DeddyH 30. Okt 2014 16:40

AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
 
Würde aber passen.
Code:
00110000 //Rec.Attr
00010000 //faDirectory
========
00010000 //faDirectory

Sir Rufo 30. Okt 2014 16:44

AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
 
Das Problem sind die fehlenden Klammern ;)

Ykcim 30. Okt 2014 16:50

AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
 
@Sir Rufo
Jepp, die Fehlermeldung ist weg, aber ich das Ergebnis ist das gleiche - es wird nur die Datei in dem Hauptverzeichnis angezeigt...

Ich weiß nicht ob es wichtig ist, aber der Pfad sieht so aus:
\\172.30.44.120\Zeichnungen\
Und dann gibt es halt Unterverzeichnisse
\\172.30.44.120\Zeichnungen\A\
\\172.30.44.120\Zeichnungen\Neu\

Ich versuche gerade den Gedanken vom schönen Günter umzusetzen...

Vielen Dank
Patrick


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:04 Uhr.
Seite 1 von 3  1 23      

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