Laden...

Grundlagenforschung des Windows Explorers bei der Ordneranalyse (Schnittstellen)

Erstellt von Abt vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.434 Views
Abt Themenstarter:in
16.807 Beiträge seit 2008
vor 12 Jahren
Grundlagenforschung des Windows Explorers bei der Ordneranalyse (Schnittstellen)

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:

  • den Einstiegsordner in einen Stack packen
  • jedes Element im Stack in einem eigenen Thread bearbeiten
  • alle gefundenen Unterordner in den Stack hauen
  • wenn alle Tasks abgearbeitet sind und der Stack leer ist -> Rückgabe

Meine Schnittstellen hierbei sind FindFirstFile und FindNextFile der Win32 API via P/Invoke.

Grüße

3.511 Beiträge seit 2005
vor 12 Jahren

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)

C
1.214 Beiträge seit 2006
vor 12 Jahren

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?

3.511 Beiträge seit 2005
vor 12 Jahren

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)

Abt Themenstarter:in
16.807 Beiträge seit 2008
vor 12 Jahren

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!