Einzelnen Beitrag anzeigen

Benmik

Registriert seit: 11. Apr 2009
557 Beiträge
 
Delphi 12 Athens
 
#5

AW: Wie funktioniert FindFirstFileW intern?

  Alt 29. Mai 2022, 21:44
Was hier langsam ist, dass FindFirstFile/FindNextFile die Dateien sortiert und bei jedem Aufruf auch versucht zu synchronisieren, falls sich zwischenzeitlich durch andere Programme was in dem Verzeichnis geändert hat.
Daran kommen mir aber Zweifel. MSN selbst sagt "This is because FindFirstFileEx does no sorting of the search results." zudem "Note: In rare cases or on a heavily loaded system, file attribute information on NTFS file systems may not be current at the time this function is called. To be assured of getting the current NTFS file system file attributes, call the GetFileInformationByHandle function." Speziell im Fall von Hardlinks habe ich mich an GetFileInformationByHandle gehalten, aber auch nicht immer mit Erfolg.

Außerdem führen die noch aus: "If you are writing a 32-bit application to list all the files in a directory and the application may be run on a 64-bit computer, you should call Wow64DisableWow64FsRedirection before calling FindFirstFileEx and call Wow64RevertWow64FsRedirection after the last call to FindNextFile." Das habe ich in meiner Anwendung tatsächlich auch gemacht; aber ich habe noch nie gesehen, dass es ein anderer macht, zum Beispiel hier in der DP in den diversen Abhandlungen über die schnellste Dateisuche.

Bezüglich des MFT-Codes meintest du vielleicht dieses Thema. Ich hatte seinerzeit mal intensiv nach Delphi-Code gesucht und den von Alexander Freudenberg gefunden. Er hat seinen Code hier zur Verfügung gestellt. Ich fand den Code zwar schwer lesbar, aber enorm hilfreich; allerdings hat Freudenberg Hardlinks nicht beachtet, weswegen ich den Code dahingehend ausgebaut habe. Die Resultate sind in der Anwendung schon beeindruckend. Leider muss man, wenn man ihn verwendet, nicht nur das Programm mit Adminrechten starten, sondern auch Delphi. Das war mir irgendwie nicht so angenehm (auch wenn ich Emba natürlich total vertraue...)
  Mit Zitat antworten Zitat