Hallo,
ich habe bereits hier und auch in einer Suchmaschine nach FindFirstFileEx gesucht. In Bezug auf Delphi aber nichts gefunden.
Ich möchte in einem zeitkritischen Programm gern ausschließlich nach Verzeichnissen suchen über die
API. Ich habe in SysUtils bereits gesehen, dass einfach alles gelesen und erst danach gefiltert wird. Auch mit
FindFirstFile
, welches eben in
SysUtils.FindFirst
genutzt wird, kann man nicht im Vorfeld filtern. Die Nutzer werden insoweit nur "geblendet", als sich SysUtils um das Filtern kümmert <- aber nachträglich.
So bin ich auf
FindFirstFileEx gestoßen. Über die Parameter
fInfoLevelId
kann man mitteilen, dass man nur das nötigste wissen will und über
fSearchOp
soll man laut
MSDN nur Directories zurück bekommen; allerdings steht dort auch, dass man keine Meldung bekommt, falls das Dateisystem dies nicht unterstützt. Schließlich soll man über
FIND_FIRST_EX_LARGE_FETCH
die Suche beschleunigen können.
Nun meine Fragen:
1. In
Windows.TFindexInfoLevels
sind
nur 2 statt der 3 bei
MSDN ausgewiesenen Werte deklariert.
FindExInfoBasic
fehlt dort, was am performantesten sein soll. Kann man das einfach so (nach)deklarieren? Falls ja, wie?
2. Unter
Windows.TFindexSearchOps
gibt es zwar
FindExSearchLimitToDirectories
. Das scheint aber wirkungslos zu sein. Es wird trotzdem jeder Eintrag inkl. Dateien angezeigt. Welche Dateisysteme außer NTFS gibt es denn noch? Unterstützt NTFS das nicht? Falls doch, wie bekommen ich heraus, ob die konkrete Partition mit NTFS es unterstützt?
3.
FIND_FIRST_EX_LARGE_FETCH
ist - zumindest in der Windows.pas - nicht deklariert. Laut
MSDN hat es den Wert 2. Wenn ich das nachträglich deklariere, liefert mir
GetLastError
aber "Falscher Parameter". Wo liegt hier mein Denkfehler?
Den Quellcode habe ich beigefügt.
Gruß, Alex
P.S. Bitte nicht wundern! Ich habe alles selbst deklariert, weil in TurboDelphi z.B. der Rückgabewert für FindFirstFileEx fälschlich als Bool deklariert und noch mehr Fehler drin waren.