![]() |
AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
Ähm meine Aussage bezog sich auf den Code-Schnipsel von DeddyH. Meinen Code-Schnipsel habe ich in meinem Beitrag schon für ungültig erklärt.
Zitat:
Delphi-Quellcode:
if ( ( Rec.Attr and faDirectory ) = faDirectory)
|
AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
Was sollen zusätzliche Klammern denn bewirken (außer, dass der Programmierer es evtl. etwas besser versteht)?
|
AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
Bei mir funktioniert dieser Code schon seit vielen Jahren in zahlreichen Anwendungen absolut zuverlässig:
Delphi-Quellcode:
In ADirectory wird das zu durchsuchende Verzeichnis angegeben.
procedure GetFilesInDirectory(ADirectory: string; AMask: String; AList, DatList, GrossList: TStrings; ARekursiv: Boolean);
var SR : TSearchRec; Datum : TDateTime; begin ADirectory := BackShlashAmEnde(ADirectory); if (SysUtils.FindFirst(ADirectory + AMask,faAnyFile and not faDirectory,SR) = 0) then begin repeat if (SR.Name<>'.') AND (SR.Name<>'..') AND (SR.Attr<>faDirectory) then begin AList.Add(ADirectory+SR.Name); Datum := FileDateToDateTime(Sr.Time); DatList.Add(DateToStr(Datum)); GrossList.Add(IntToStr(Sr.size)); end; until SysUtils.FindNext(SR)<>0; SysUtils.FindClose(SR); end; if ARekursiv then if (SysUtils.FindFirst(ADirectory+'*.*',faDirectory,SR)=0) then begin repeat if (SR.Name<>'.') AND (SR.Name<>'..') then GetFilesInDirectory(ADirectory+SR.Name,AMask,AList,DatList,GrossList,True); until FindNext(SR)<>0; SysUtils.FindClose(SR); end; end; AMask enthält die Suchmaske. AList liefert die Dateiliste zurück. DatList liefert die zugehörigen Datei-Datumwerte zurück. GrossList liefert die zugehörigen Datei-Größen zurück. ARekursiv gibt an, ob Unterverzeichnisse durchsucht werden sollen. |
AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
Kann ich mir nicht vorstellen, denn
Zitat:
|
AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
Ist schon jemandem aufgefallen, dass
Delphi-Quellcode:
eine
FileSearches
Delphi-Quellcode:
mit dem Rückgabetyp
function
Delphi-Quellcode:
ist, dessen Ergebnis für die Unterverzeichnisse weder zugewiesen noch ausgewertet wird? Das dürfte das Problem erklären. Oder verstehe ich die Rekursion falsch?
TRows
MfG Dalai |
AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
Nö, aber ich dachte, dass er mittels Debugger die gekennzeichnete Zeile als fehlerhaft ausgemacht hat. Das hat mit dem Funktionsergebnis erstmal nichts zu tun, obwohl das natürlich auch vom Compiler bemängelt werden sollte.
|
AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
Hallo Zusammen,
vielen Dank für die zahlreiche Unterstützung!!! So klappt es jetzt:
Delphi-Quellcode:
Ich hätte erwähnen sollen, dass TRows ein Array of Array of string ist.
function listFiles(Pfad, FileName: string): TRows;
var I: integer; begin filename:='*'+fileName+'*'; setlength(Result,1,0); for fileName in TDirectory.GetFiles(Pfad, FileName, TSearchOption.soAllDirectories) do begin SetLength(Result,2,Length(Result[0])+1); Result[0,Length(Result[0])-1]:=FileName; end; end; @Sir Rufo Ich hatte die eckigen Klammern vergessen, wodurch die Fehlermeldung ausgelöst wurde. Vielen Dank nochmal Patrick |
AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
Zitat:
Wenn hier
Delphi-Quellcode:
:
if (Rec.Attr and faDirectory = faDirectory)
AND wir immer vor = aufgelöst, also passt es. Da aber alle Dateiattribute nur aus einem Bit bestehen, kann man das noch kürzen
Delphi-Quellcode:
if (Rec.Attr and faDirectory <> 0)
Das mit dem IN klappt nicht, da Attr ein Integer und kein Set ist, außerdem sind die fa-Konstanten Bit-Masken und keine Indize. (gut, man könnte den Integer in ein
Delphi-Quellcode:
, aber dann ist noch das Problem mit den Konstanten, also wenn dann lieber direkt in ein TAttributeSet casten und als Property in TSearchRec rein)
set of 0..31
|
AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
Zitat:
Delphi-Quellcode:
wird gar nicht kompiliert, dazu müsste man schon explizit Rec.Attr nach Boolean casten, dann ist man aber auch selbst Schuld, wenn es nicht stimmt.
if (Rec.Attr and (faDirectory = faDirectory))
Zitat:
|
AW: Rekursive Dateisuche lässt Unterverzeichnisse aus
@himitsu
Ja, Ja ... :) @DeddyH Der Code von Perusau funktioniert, denn der Such-Filter steht auf
Delphi-Quellcode:
.
faAnyFile and not faDirectory
Allerdings könnte das hier
Delphi-Quellcode:
direkt wieder raus, der dürfte nie anschlagen ;)
if (SR.Name<>'.') AND (SR.Name<>'..') AND (SR.Attr<>faDirectory) then
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 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