Guten Morgen,
weiß zufällig jemand spontan, welche Schnittstellen der Windows Explorer / die Shell für die Analyse bzw. das Durchsuchen eines Ordners nutzt?
Speziell geht es um die Anzahl und Eigenschaften von Dateien und Ordnern auf einer Share. Nutzt er gar keine Windows API, sondern die Master File Tables - und damit für mich ohne Adminrechte unerreichbar oder den internen Indexer?
Meine Implementierungsversuche brauchen alle mehr Zeit, als der Explorer (24 Sekunden) von Win7; sind aber dennoch deutlich schneller als System.IO (4 Minuten 12 Sekunden).
Schnellste Lösung durch meine Versuche: 59 Sekunden.
Trotzdem ist mir das absolut nicht genug :evil:
Mein Ansatz:
Meine Schnittstellen hierbei sind FindFirstFile und FindNextFile der Win32 API via P/Invoke.
Grüße
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo,
der Explorer zum Abrufen/Durchsuchen von Ordnern die Methode "EnumObjects" aus dem Interface IShellFolder. Du kannst die ja mal die Sourcen meine KExtensions anschauen, da benutze ich diese Interfaces und Methoden und bin damit um längen schneller als die .NET eigenen Methoden, sowie die FindXXXFile Methoden.
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
Hi Khalid,
weißt du auch, warum das so ist? Die Beobachtung habe ich noch unter Windows 98 gemacht. Die Shellfunktionen waren um Längen schneller, als FindFirstFile und FindNextFile. Liegt es einfach daran, dass die Shell einfach mehr Werte cashed?
FindXXXFile Methoden füllen die Dateieigenschaften sofort vor (WIN32_FIND_DATA). EnumObjects nicht. Bei EnumObjects muss man nachträglich die Dateiinformationen abfragen (z.B. FileCreationDate).
Oder anders gesagt, bei FindXXXFile bekomme ich ein String, bei EnumObjects eine ID 😃
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
FindXXXFile Methoden füllen die Dateieigenschaften sofort vor (WIN32_FIND_DATA).
Also ein ähnliches Verhalten, wie FileInfo von System.IO.
Danke für den Hinweis auf EnumObjects. Der kam nun bislang noch nicht unter.
Danke!
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code